永发信息网

C#winform中为什么TCP/IP通讯的时候总是卡死,该怎么解决?

答案:2  悬赏:30  手机版
解决时间 2021-02-24 22:08
我在程序里启用了两个Socket,一个是socket,另外一个是acceptSocket。socket用来侦听,acceptSocket用来接收。可是总是时不时的会出现运行卡机的状况。我查了一些资料,说是请求的时候要等待回应,所以阻塞。也不知道是不是这样,该怎样解决那?求各位大神指导指导,急!急!
下面是代码:
point = new IPEndPoint(HostIP, Int32.Parse("27010"));
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(point);
socket.Listen(24);
acceptedSocked = socket.Accept();
isopen = true;
notifyIcon1.ShowBalloonTip(2000, "提示", "网口侦听已启动", ToolTipIcon.Info);
Thread newthread = new Thread(new ThreadStart(TCPProccess));
newthread.Start();
每次运行到acceptedSocked = socket.Accept();这句是就会卡住,无响应。
跪求大神知道,谢谢先了!
最佳答案
acceptedSocked = socket.Accept();这个操作会刮起你的程序,这里需要用多线程处理,最简单用异步把它放在线程池运行也行。

比如:
Action act=new Action(()=>{
acceptedSocked = socket.Accept();

});
act.BeginInvoke();这样既可。
全部回答
把下面所有出现ip:192.168.1.190的地方全部改成你的地址!!! 这个是纯控制台的,另外我这还有窗体的!你要就联系我!! 服务器端: using system; using system.collections.generic; using system.linq; using system.text; using system.net; using system.net.sockets; namespace s1 { class program { static void main(string[] args) { try { // 把ip地址转换为ipaddress的实例 ipaddress ipad = ipaddress.parse("192.168.1.192"); // 初始化监听器, 端口为8001 tcplistener mylist = new tcplistener(ipad, 8001); // 开始监听服务器端口 mylist.start(); // 输出服务器启动信息 console.writeline("在8001端口启动服务..."); console.writeline("本地节点为:" + mylist.localendpoint); console.writeline("等待连接....."); // 等待处理接入连接请求 // 新建立的连接用套接字s表示 socket s = mylist.acceptsocket(); console.writeline("连接来自 " + s.remoteendpoint); // 接收客户端信息 byte[] b = new byte[100]; int k = s.receive(b); console.writeline("已接收..."); for (int i = 0; i < k; i++) { console.write(convert.tochar(b[i])); } // 处理客户端请求,给客户端回应 asciiencoding asen = new asciiencoding(); s.send(asen.getbytes("the string was recieved by the server.")); console.writeline("\n已发送回应信息"); // 善后工作,释放资源 s.close(); mylist.stop(); } catch (exception e) { console.writeline("error..... " + e.stacktrace); } } } } 客户端: using system; using system.collections.generic; using system.linq; using system.text; using system.net; using system.net.sockets; using system.io; namespace c1 { class program { static void main(string[] args) { try { tcpclient myclient=new tcpclient(); console.writeline("连接服务器................"); myclient.connect("192.168.1.192",8001); console.writeline("已连接........"); console.writeline("请输入要传送的字符串"); string str=console.readline(); stream mstream=myclient.getstream(); asciiencoding myasc=new asciiencoding(); byte[] ba=myasc.getbytes(str); console.writeline("传送中.............."); mstream.write(ba,0,ba.length); byte[] bb=new byte[50]; int k=mstream.read(bb,0,50); for (int i=0;i<50 ;i++ ) { console.write(convert.tochar(bb[i])); } myclient.close(); } catch(exception e) { console.writeline("something wrong: "+e.message); } console.readkey(); } } }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
微信呼叫对方,对方没提示,手机没反应
焊工证怎么复审
通二邮政代办所这个地址在什么地方,我要处理
我的岳父曾经受过刑事出发,我的公务员政审能
热得快怎么把碱去掉
人员吸纳的依据主要有()。A.模板B.组织关系图
网上卖冒名卡的真实吗
在济南买的金艺珠宝的千足金镶A货翡翠。不知
…跪求高中英语作文…乐观积极的生活态度给我
吉山新村这个地址在什么地方,我要处理点事
简单微信网名
HIS的7750和蓝宝石的7750,同时AMD Radeon HD
花田喜铺这个地址在什么地方,我要处理点事
大学期末考试挂了但是补考过了那这科算挂吗?
一方湾湾月什么意思
推荐资讯
贷款利率比央行同期贷款利率增加9.75个百分点
荣耀8微信为什么不能指纹支付
大小谢
英语翻译给国外代理发邮件,请在以后的空运主
远征好玩不,最关键是烧钱不
每次都尿一点点,是怎么回事
有多少传说中的网恋被现实打败了
移动以旧换新用美版手机可以去换吗?
世无良猫,可出什么题,及答案
在求戴维南等效电路时,如何测得开路电压及短
潘通色卡英译汉问题
奇迹人生护肤造型我想知道这个在什么地方
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?