Socket:长连接,第一次通信可收发;第二次可收,发送后客户端收不到消息,麻烦各位给点意见。
服务器端是用的C# .net技术,客户端是用的C++class Listener
{
private TcpListener tcpListener = null; /// <summary>
/// 启动监听,轮询监听客户机请求并将客户端套接字存入转发表
/// </summary>
public void StartUp()
{
IPAddress localIP = Dns.GetHostAddresses(Dns.GetHostName())[0];//可能有多个,此时的IP是本地IP
tcpListener = new TcpListener(localIP, 1000);
tcpListener.Start();//开始侦听传入的连接请求。
Console.WriteLine("服务器已启动,正在监听...\n");
while (true)
{
byte[] bytesRcv = new byte[maxPacketB];
int rcvLen;
Socket clientSkt = tcpListener.AcceptSocket();
rcvLen = clientSkt.Receive(bytesRcv); //此处给 bytesSend 赋值,可以肯定没问题,略 clientSkt.Send(bytesSend, rcvLen, SocketFlags.None); //此处可发送,对方也可以接受到 while (true)
{
bytesRcv = new byte[maxPacketB];
bytesSend = new byte[maxPacketB]; rcvLen = clientSkt.Receive(bytesRcv); //此处给 bytesSend 赋值,可以肯定没问题,略 clientSkt.Send(bytesSend, rcvLen, SocketFlags.None); //此处可发送,但对方接受不到
}
}
}
}
服务器端是用的C# .net技术,客户端是用的C++class Listener
{
private TcpListener tcpListener = null; /// <summary>
/// 启动监听,轮询监听客户机请求并将客户端套接字存入转发表
/// </summary>
public void StartUp()
{
IPAddress localIP = Dns.GetHostAddresses(Dns.GetHostName())[0];//可能有多个,此时的IP是本地IP
tcpListener = new TcpListener(localIP, 1000);
tcpListener.Start();//开始侦听传入的连接请求。
Console.WriteLine("服务器已启动,正在监听...\n");
while (true)
{
byte[] bytesRcv = new byte[maxPacketB];
int rcvLen;
Socket clientSkt = tcpListener.AcceptSocket();
rcvLen = clientSkt.Receive(bytesRcv); //此处给 bytesSend 赋值,可以肯定没问题,略 clientSkt.Send(bytesSend, rcvLen, SocketFlags.None); //此处可发送,对方也可以接受到 while (true)
{
bytesRcv = new byte[maxPacketB];
bytesSend = new byte[maxPacketB]; rcvLen = clientSkt.Receive(bytesRcv); //此处给 bytesSend 赋值,可以肯定没问题,略 clientSkt.Send(bytesSend, rcvLen, SocketFlags.None); //此处可发送,但对方接受不到
}
}
}
}
另外,你怎么确定“clientSkt.Send(bytesSend, rcvLen, SocketFlags.None); //此处可发送,但对方接受不到”
你怎么确定这里可发送了??之前rcvLen = clientSkt.Receive(bytesRcv); 在没有收到对方的信息之前会阻塞在这里。
通过逐步调试知道的。
有收到对方的信息之前会阻塞在那个地方,就是接受到消息后,便会继续往执行。
最后那行“clientSkt.Send(bytesSend, rcvLen, SocketFlags.None);”也执行了,但是对方没有收到