博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
也说Socket
阅读量:5368 次
发布时间:2019-06-15

本文共 6942 字,大约阅读时间需要 23 分钟。

网上有大量socket相关文章,茫茫多,大多交代不清,最近自我整理了一下socket相关知识,附加了大量代码注释,先看效果。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

上代码,客户端

1         Socket socket1 = null;//一个全局的socket对象  2   3         private void btnConnect_Click(object sender, EventArgs e)  4         {  5             //获得服务器ip和端口号  6             IPAddress ip = IPAddress.Parse(textBox1.Text);  7             int port =Convert.ToInt32( textBox2.Text);  8   9             //构造客户端socket,设置为tcp协议模式 10             socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 11  12             //连接 13             socket1.Connect(ip,  port); 14             if (socket1.Connected)//如果连接成功 15             { 16                 textBox3.Text += "连接成功\r\n"; 17                 SendMsg(socket1, "发成功"); 18  19                 string recMsg= ""; 20                 //接收 21                 ReceiveMsg(socket1, ref recMsg); 22                 textBox3.Text +=recMsg;//文本显示 23             } 24             else 25             { 26                 textBox3.Text += "连接不成功\r\n"; 27             } 28         } 29  30         private void btnSendMessage_Click(object sender, EventArgs e) 31         { 32             if (socket1.Connected) 33             { 34                 string sendMsg = textBox4.Text; 35  36                 //依据长度判断是否发送 37                 if (sendMsg.Length <= 0) 38                 { 39                     return; 40                 } 41  42                 //拿到发送是否成功的标记 43                 bool isSendSuccess = SendMsg(socket1, textBox4.Text); 44  45                 string recMsg = ""; 46                 bool isReceiveSuccess = ReceiveMsg(socket1, ref recMsg); 47                 textBox3.Text += recMsg; 48  49                 if (!(isSendSuccess&&isReceiveSuccess)) 50                 { 51                     textBox3.Text += "连接已断开,请重连"; 52                 } 53             } 54         } 55  56         ///  57         /// 发送内容,并显示 58         ///  59         /// 发送内容的socket 60         /// 输入字符串 61         /// 
发送是否成功
62 private bool SendMsg(Socket socket, string msg) 63 { 64 try { 65 socket.Send(Encoding.UTF8.GetBytes(msg)); 66 return true; 67 } 68 catch (Exception e) 69 { 70 socket.Close(); 71 return false; 72 } 73 } 74 75 /// 76 /// 接收内容,并显示 77 /// 78 /// 接受内容的socket 79 /// 输出字符串 80 ///
接收是否成功
81 private static bool ReceiveMsg(Socket socket ,ref string msg) 82 { 83 try 84 { 85 int recNumber;//接收到的字节数量 86 byte[] recBytes = new byte[1024];//缓冲字节数组 87 recNumber = socket.Receive(recBytes);//接收行为 88 byte[] recBytesForShort = new byte[recNumber];//byteArrayForDestination 89 Array.Copy(recBytes, recBytesForShort, recNumber);//拷贝 90 91 //显示文本构造 92 msg += (Encoding.UTF8.GetString(recBytesForShort) + "\r\n"); 93 94 return true; 95 } 96 catch (Exception e) 97 { 98 socket.Close(); 99 100 return false;101 }102 103 }
客户端

 

服务端

1         static void Main(string[] args)  2         {  3             //设置监听的ip和端口号  4             IPAddress ip = IPAddress.Parse("192.168.120.56");  5             IPEndPoint ipEP = new IPEndPoint(ip, 8088);  6   7             //迎宾socket  8             Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  9             //绑定 10             serverSocket.Bind(ipEP); 11             //监听 12             serverSocket.Listen(10); 13             Console.WriteLine("监听已开\r\n"); 14  15             while (true) 16             { 17                 //这里会阻塞当前线程,以等待连接 18                 Socket socketTemp = serverSocket.Accept(); 19  20                 //开启其他线程处理数据 21                 ParameterizedThreadStart pts = new ParameterizedThreadStart(ReceiveAndSend);//这里传入的方法必须是静态 22                 new Thread(pts).Start(socketTemp); 23             } 24  25         } 26  27         ///  28         /// socket循环读取和发送的方法,建议用于多线程异步处理 29         ///  30         /// 单用户Socket对象 31         private static void ReceiveAndSend(object socketTemp) 32         { 33             Socket socket = (Socket)socketTemp; 34             IPEndPoint ipep = ((IPEndPoint)(socket.RemoteEndPoint)); 35             string ip = ipep.Address.ToString();//获得对方ip 36             string port = ipep.Port.ToString();//获得对方端口 37             byte[] buffer = new byte[1024]; 38  39             while (true)//循环接收和发送 40             { 41                 //接收并显示 42                 string result=""; 43                 bool isReceiveMsgSuccess = ReceiveMsg(socket, ref result); 44                 if (isReceiveMsgSuccess) 45                 { 46                     Console.WriteLine(DateTime.Now.ToLongDateString()+" "+ DateTime.Now.ToLongTimeString()); 47                     Console.WriteLine(ip + " _ " + port + ":" + result); 48                 } 49  50                 //回发 51                 string sendBackStr = "服务端已接收:" + result; 52                 SendMsg(socket, sendBackStr); 53  54                 //socket.Shutdown(SocketShutdown.Both); 55                 //socket.Close(); 56                 //socket.Dispose(); 57             } 58         } 59  60         ///  61         /// 接收内容(如果失败,会释放socket) 62         ///  63         /// 接受内容的socket 64         /// 输出字符串 65         /// 
接收是否成功
66 private static bool ReceiveMsg(Socket socket,ref string msg) 67 { 68 try 69 { 70 int recNumber;//接收到的字节数量 71 byte[] recBytes = new byte[1024];//缓冲字节数组 72 recNumber = socket.Receive(recBytes);//接收行为 73 byte[] recBytesForShort = new byte[recNumber]; 74 Array.Copy(recBytes, recBytesForShort, recNumber);//拷贝 75 76 //显示 77 msg += Encoding.UTF8.GetString(recBytesForShort) + "\r\n"; 78 79 return true; 80 } 81 catch (Exception e) 82 { 83 socket.Close(); 84 85 return false; 86 } 87 88 } 89 90 /// 91 /// 发送内容(如果失败,会释放socket) 92 /// 93 /// 发送内容的socket 94 /// 输入字符串 95 ///
接收是否成功
96 private static bool SendMsg(Socket socket, string msg) 97 { 98 try 99 {100 socket.Send(Encoding.UTF8.GetBytes(msg));101 return true;102 }103 catch (Exception e)104 {105 socket.Close();106 return false;107 }108 }
服务端

 

需要源码请移步:

转载于:https://www.cnblogs.com/xianerwonder/p/6524628.html

你可能感兴趣的文章
占小狼的简书博客
查看>>
struts2__action执行顺序
查看>>
php异常处理
查看>>
[xampp] /usr/bin/env: php: No such file or directory
查看>>
细学PHP 10 贴吧-2
查看>>
黑客攻防入门秘籍
查看>>
Swift迎来了1.0 GM 版(2014.09.09)
查看>>
【iOS开发-68】APP下载案例:利用tableView自带的cell布局+缓存池cell复用时注意button状态的检查...
查看>>
《Genesis-3D开源游戏引擎-FQA常见问题解答》2014年01月10号版本
查看>>
Java 编程下实现随机无重复数字功能
查看>>
Android 编程下的代码混淆
查看>>
animation属性
查看>>
页内的模块和组件抽象规划经验
查看>>
安全-分析深圳电信的新型HTTP劫持方式
查看>>
将Centos的yum源更换为国内的阿里云源
查看>>
git diff 的用法
查看>>
一段sql的优化
查看>>
十进制与十六进制的相互转换
查看>>
在Flex中用Validator检测数字、字符串、Email.
查看>>
[leetcode]4Sum
查看>>