c# socket 为了通信新建了一个socket c = s.Accept(); 程序就卡这了。也不出错。就是未响应。

c# socket 为了通信新建了一个socket c = s.Accept(); 程序就卡这了。也不出错。就是未响应。,第1张

很久没写C#程序了,但是这个问题如果我脑子没乱的话

应该是UI线程被sAccept()阻塞了导致假死

正确的方法应该是把这些内容放到一个Thread里面运行

Thread thread=new Thread(new ThreadStart(把你的代码写进一个方法,这里填写方法名));

threadstart();

ps:C#的Socket程序,我建议使用异步来做这个部分网上源码很多

帮你写了个,着实不喜C++,获取摄像头数据保存成本地的代码,相信你已经可以自己解决了,我只根据题目要求,写了个两种语言(C#,C++)相互通信的代码,主要原理就是socket通信! C++代码(客户端):#include <stdioh>#include <stringh>#include <AfxWinh>#include <windowsh>#include "Winsock2h"#pragma comment (lib, "ws2_32lib")void main(){ WORD wVersionRequested; WSADATA wsaData; int err; int bytes=0; wVersionRequested = MAKEWORD(1,1); err = WSAStartup( wVersionRequested, &wsaData ); if(err!=0 ) { exit(0); } if(LOBYTE( wsaDatawVersion )!= 1|| HIBYTE( wsaDatawVersion )!= 1) { WSACleanup( ); exit(0); } SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrvsin_addrS_unS_addr=inet_addr("127001"); addrSrvsin_family=AF_INET; addrSrvsin_port=htons(9950); connect(sockClient,(SOCKADDR)&addrSrv,sizeof(SOCKADDR)); //发送 int i=0; char zjs[10],buff;; CFile myfile; myfileOpen("牌坊jpg",CFile::modeRead|CFile::typeBinary);//自己修改路径 int t; t=myfileGetLength(); sprintf(zjs,"%d",t); printf("总大小: %s\n",zjs); buff=(char )malloc((t+1)sizeof(char)); myfileRead(buff,myfileGetLength()); send(sockClient,zjs,strlen(zjs),0); send(sockClient,buff,myfileGetLength(),0); //接收 char recvBuf[50]; bytes=recv(sockClient,recvBuf,50,0); for(i=0;i<bytes;i++); recvBuf[i]='\0'; printf("%s\n",recvBuf); closesocket(sockClient); WSACleanup();}C#代码(服务端):using System;using SystemCollectionsGeneric;using SystemDiagnostics;using SystemText;using SystemTextRegularExpressions;using SystemNet;using SystemNetSockets;using SystemIO;namespace socket服务器端{ class Program { static void Main(string[] args) { int bytes=0; byte[] buffer=new byte[10240]; IPEndPoint ipe1 = new IPEndPoint(IPAddressAny, 9950); Socket socket1 = new Socket(AddressFamilyInterNetwork, SocketTypeStream, ProtocolTypeTcp); socket1Bind(ipe1); while (true) { socket1Listen(10); Socket socket2 = socket1Accept(); IPEndPoint ipe2 = (IPEndPoint)socket2RemoteEndPoint; if (socket2Connected) { ConsoleWriteLine("开始接收"); int start = 0; FileStream fs = new FileStream("牌坊jpg",FileModeCreate); BinaryWriter bw = new BinaryWriter(fs); bytes = socket2Receive(buffer); int total=Int32Parse(EncodingDefaultGetString(buffer, 0, bytes)ToString()); ConsoleWriteLine("总大小: "+ total); do { bytes = socket2Receive(buffer); bwSeek(start, 0); bwWrite(buffer, 0, bytes); start += bytes; ConsoleWriteLine("已经接收: "+ start); }while(start<total); bwFlush(); bwClose(); fsClose(); socket2Send(EncodingDefaultGetBytes("主机接收完毕")); } socket2Shutdown(SocketShutdownBoth); socket2Close(); break; } ConsoleWriteLine("接收完毕"); ProcessStart("牌坊jpg"); ConsoleReadLine(); } }}注意事项(C++):效果(C++) 效果(C#)

以上就是关于c# socket 为了通信新建了一个socket c = s.Accept(); 程序就卡这了。也不出错。就是未响应。全部的内容,包括:c# socket 为了通信新建了一个socket c = s.Accept(); 程序就卡这了。也不出错。就是未响应。、C++程序与C#程序间如何通信、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10080019.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存