socket的初入门(一)
先说下服务端吧如下
private static void Service() { int revc = 0; byte [] mess = new byte [9999]; IPEndPoint oIPEndPoint = new IPEndPoint(IPAddress.Any, 9999); Socket oSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); oSocket.Bind(oIPEndPoint); //开始监听的服务端IP oSocket.Listen(100); //挂起的列队长度 Console.WriteLine( "等待客户端介入...." ); Socket oSocketClient = oSocket.Accept(); //当有客户端连接的时候返回一个新的socket给他使用通信 IPEndPoint oIPEndPointClient = (IPEndPoint)oSocketClient.RemoteEndPoint; //获取服务器的IP和端口 Console.WriteLine( "客户端:" +oIPEndPointClient.Address+ "端口:" +oIPEndPointClient.Port+ "进入服务器" ); string strWelcome = "欢迎进入" ; mess = Encoding.UTF8.GetBytes(strWelcome); oSocketClient.Send(mess,mess.Length,SocketFlags.None); //发送消息 while ( true ) { try { mess = new byte [1024]; revc = oSocketClient.Receive(mess); if (revc == 0) { break ; } Console.WriteLine(Encoding.UTF8.GetString(mess, 0, revc)); oSocketClient.Send(mess, revc, SocketFlags.None); } catch (Exception) { break ; } } Console.WriteLine( "断开连接:" +oIPEndPointClient.Address); oSocketClient.Close(); oSocket.Close(); Console.ReadLine(); } |
然后是客户端
private static void Client() { byte [] data = new byte [9999]; Socket oSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); Console.WriteLine( "请输入服务端IP" ); string strIP = Console.ReadLine(); Console.WriteLine( "请输入端口" ); int iPost = Convert.ToInt32(Console.ReadLine()); IPEndPoint oIPEndPoint = new IPEndPoint(IPAddress.Parse(strIP), 9999); try { oSocket.Connect(oIPEndPoint); } catch (Exception ex) { Console.WriteLine( "无法连接服务器,错误原因:" +ex.Message); return ; } int revc = oSocket.Receive(data); Console.WriteLine(Encoding.UTF8.GetString(data, 0, revc)); while ( true ) { oSocket.Send(Encoding.UTF8.GetBytes(Console.ReadLine())); data = new byte [9999]; oSocket.Shutdown(SocketShutdown.Both); } oSocket.Close(); Console.ReadLine(); } |
现在问题是客户端点X关闭之后服务端就异常了,异常原因是因为服务端在死循环去获取客户端的信息,客户端突然消失了让服务端爆发了异常。没想到如何解决,找百度大神看看有资料没。
作者:小胖李
出处:http://www.cnblogs.com/minCS/
本文版权归作者和博客园共有,禁止转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

依旧牛逼依旧狂依旧是个小流氓
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?