socket编程(一)

 通过Socket()函数可以创建两种类型的套接字:字节流套接字 和 数据报套接字 。

  字节流套接字:提供了双向、有序、无重复、且无记录边界的数据流服务。

  数据报套接字:提供了双向的数据流,但是不保证是可靠、有序、无重复的。

而基于 TCP协议(transmission control protocol)和UDP协议 (user data protocol)的应用程序分别使用的是 字节流套接字和 数据报套接字。

 

TCP协议与UDP协议的区别:

 1.TCP 面向连接的,而UDP面向无连接的

 2.两者对消息的可靠传递机制不同。TCP有专门的消息可靠传递保证机制,当接收方收到发送方发送的消息,会自动返回信息告知发送方对方已经收到信息,发送方收到消息传送成功确认消息后,才继续传送,否则一直等待确认消息 。而UDP则没有这样的机制,它只是一直的传送,当有数据丢失时,也不会检测到。

 

 UDP 编程模式(using System.Net 和 using System.Net.Sockets)

 

 服务器端:

 客户端

 1             UdpClient listener = new UdpClient(listenport);//提供UDP网络服务
 2             IPEndPoint groupIP = new IPEndPoint(IPAddress.Any, 100);//接受任意IP,端口号为100的网络端点
 3             try
 4             {
 5                 //无限循环,等待监听 信息
 6                 while (true)
 7                 {
 8                     byte[] bytes = listener.Receive(ref groupIP); //接受来自端口号为100的信息
 9                     string strInfo = Encoding.GetEncoding("gb2312").GetString(bytes, 0, bytes.Length);
10                     MessageBox.Show(strInfo);
11                 }
12             }
13             catch (Exception e)
14             {
15                 Console.WriteLine(e.ToString());
16             }
17             finally
18             {
19                 listener.Close();
20             }

 在Form1_Load 中调用 StartListen()方法。

 客户端:

 服务器端

1             Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//声明UDP协议的套接字接口
2             IPAddress broadcast = IPAddress.Parse(tbxIP.Text.ToString()); //将TextBox中输入的服务器 IP 转换为 IPAddress类型
3             byte[] sendbuf = Encoding.GetEncoding("gb2312").GetBytes(tbxContent.Text.ToString());//将TextBox中输入的内容转换为byte[] 类型
4             IPEndPoint ep = new IPEndPoint(broadcast, 100); //用指定的地址和端口号实例化网络端点,端口号,要与服务器 代码中的端口相同。
5             s.SendTo(sendbuf, ep);//调用SendTo方法

 这样就可以实现

              

 

Untitled Page 作者:余意
出处:http://cnblogs.com/zabery
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2009-11-29 15:13  zabery  阅读(285)  评论(1编辑  收藏  举报