又是Tcp问题? 为什么服务端接收同一客户端一次数据后 就再也收不到这个客户端的数据了? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主用什么通信的?remoting???有租约期的貌似,请详细说明 socket??? 贴代码 无图无真相 private void SocketReceivedata(){ int port = 8888; string recvdata = string.Empty;//接受的数据 string senddata = string.Empty;//发送数据 string ipstr = string.Empty; byte[] data = new byte[20 * 1024]; int recv;//用于表示客户端发送的信息长度 IPEndPoint ipep = new IPEndPoint(IPAddress.Any, port);//本机预使用的IP和端口 newsock.Bind(ipep);//绑定 newsock.Listen(10);//监听 try { while (true) { //用死循环来不断的从客户端获取信息 client = newsock.Accept(); IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint; if (client.Connected) { byte[] sdata = new byte[10 * 1024]; recv = client.Receive(data); if (recv == 0)//当信息长度为0,说明客户端连接断开 return; recvdata = Encoding.UTF8.GetString(data, 0, recv); senddata = "ok"; sdata = Encoding.UTF8.GetBytes(senddata); client.Send(sdata, sdata.Length, SocketFlags.None); } } } catch (SocketException) { return; }} if (recv == 0) return;这个是不是有问题? 代码不是这样写的,要分两个循环,一个循环是不断的接入客户的连接,另一个循环是不断的接入用户的数据。也就是 client = newsock.Accept(); 这个要在另外一个死循环里才行,不然的话,你的代码接收一次客户端连接,且在收完客户的数据之后,开始下一次循环时,你的那个client就会被下一个连接进来的客户给覆盖了,而之前的那个客户端连接就会在空闲的时候被系统断开, client = newsock.Accept();必须在最后面再调用一次, private void SocketReceivedata(){ int port = 8888; string recvdata = string.Empty;//接受的数据 string senddata = string.Empty;//发送数据 string ipstr = string.Empty; byte[] data = new byte[20 * 1024]; int recv;//用于表示客户端发送的信息长度 IPEndPoint ipep = new IPEndPoint(IPAddress.Any, port);//本机预使用的IP和端口 newsock.Bind(ipep);//绑定 newsock.Listen(10);//监听 try { while (true) { //用死循环来不断的从客户端获取信息 client = newsock.Accept(); IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint; if (client.Connected) { while(true) { byte[] sdata = new byte[10 * 1024]; recv = client.Receive(data); if (recv == 0)//当信息长度为0,说明客户端连接断开 return; recvdata = Encoding.UTF8.GetString(data, 0, recv); senddata = "ok"; sdata = Encoding.UTF8.GetBytes(senddata); client.Send(sdata, sdata.Length, SocketFlags.None); } } } } catch (SocketException) { return; }}这样加个加个循环? 这样改,和没有改有什么区别你最好是开两个线程,函数1List<Socket> list = new List<Socket>();while(true){ client = newsock.Accept(); //然后把这个client加入到一个队列或是其它的什么,比如List list.Add(client);}函数2while(true){ foreach( Socket client in list) { 在这里面接收每个Socket的数据 }} 正则表达式 从字符串中提取数组,遇到换行就提取不了 xml 删除节点问题 急等 怎样用递归遍历xml文件到TreeView 如何实现 IDispatch 结构 ContextMenuStrip的二级菜单怎么访问 C#中如何定义含有事件的变量? C# Excel导入到DataSet后如何查询得到部分数据? 数据库出错问题 问一下关于一个XML的新问题,请大师解决!!! 哪位高人有《C#入门经典》电子书,请发给我一份,谢谢! 关于不能添加工具的问题 有谁用过PopupWin的进来帮忙看一下
private void SocketReceivedata()
{
int port = 8888;
string recvdata = string.Empty;//接受的数据
string senddata = string.Empty;//发送数据
string ipstr = string.Empty;
byte[] data = new byte[20 * 1024];
int recv;//用于表示客户端发送的信息长度
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, port);//本机预使用的IP和端口
newsock.Bind(ipep);//绑定
newsock.Listen(10);//监听
try
{
while (true)
{
//用死循环来不断的从客户端获取信息
client = newsock.Accept();
IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint;
if (client.Connected)
{
byte[] sdata = new byte[10 * 1024];
recv = client.Receive(data); if (recv == 0)//当信息长度为0,说明客户端连接断开
return;
recvdata = Encoding.UTF8.GetString(data, 0, recv);
senddata = "ok";
sdata = Encoding.UTF8.GetBytes(senddata);
client.Send(sdata, sdata.Length, SocketFlags.None);
}
}
}
catch (SocketException)
{
return;
}
}
return;
这个是不是有问题?
client = newsock.Accept();
这个要在另外一个死循环里才行,不然的话,你的代码接收一次客户端连接,且在收完客户的数据之后,开始下一次循环时,
你的那个client就会被下一个连接进来的客户给覆盖了,而之前的那个客户端连接就会在空闲的时候被系统断开,
必须在最后面再调用一次,
private void SocketReceivedata()
{
int port = 8888;
string recvdata = string.Empty;//接受的数据
string senddata = string.Empty;//发送数据
string ipstr = string.Empty;
byte[] data = new byte[20 * 1024];
int recv;//用于表示客户端发送的信息长度
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, port);//本机预使用的IP和端口
newsock.Bind(ipep);//绑定
newsock.Listen(10);//监听
try
{
while (true)
{
//用死循环来不断的从客户端获取信息
client = newsock.Accept();
IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint;
if (client.Connected)
{
while(true)
{
byte[] sdata = new byte[10 * 1024];
recv = client.Receive(data); if (recv == 0)//当信息长度为0,说明客户端连接断开
return;
recvdata = Encoding.UTF8.GetString(data, 0, recv);
senddata = "ok";
sdata = Encoding.UTF8.GetBytes(senddata);
client.Send(sdata, sdata.Length, SocketFlags.None);
}
}
}
}
catch (SocketException)
{
return;
}
}这样加个加个循环?
这样改,和没有改有什么区别你最好是开两个线程,
函数1
List<Socket> list = new List<Socket>();
while(true)
{
client = newsock.Accept();
//然后把这个client加入到一个队列或是其它的什么,比如List
list.Add(client);
}函数2
while(true)
{
foreach( Socket client in list)
{
在这里面接收每个Socket的数据
}
}