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 }
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方法
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方法
这样就可以实现
出处:http://cnblogs.com/zabery
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。