C#中的问题套接字TCP IP在停止之前仅收到来自客户端的一条消息
我的服务器在tcp/ip中有问题,因为在收到一条消息后,有一条消息无法工作。 我不知道使用一段时间是否正确,以及如何使用它。 有什么建议吗 多谢各位C#中的问题套接字TCP IP在停止之前仅收到来自客户端的一条消息,c#,sockets,tcp,server,client,C#,Sockets,Tcp,Server,Client,我的服务器在tcp/ip中有问题,因为在收到一条消息后,有一条消息无法工作。 我不知道使用一段时间是否正确,以及如何使用它。 有什么建议吗 多谢各位 my method() sdk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sdk.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8052))
my method()
sdk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sdk.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8052));
sdk.Listen(10);
Socket accepted = sdk.Accept();
Buffer = new byte[accepted.SendBufferSize];
int bytesRead = accepted.Receive(Buffer);
byte[] formatted = new byte[bytesRead];
for (int i = 0; i < bytesRead; i++)
{
formatted[i] = Buffer[i];
}
Debug.Log("\t Server" + "\n");
string stradata = Encoding.ASCII.GetString(formatted);
Debug.Log("-->" + "" + stradata + "\n\n");
testo = stradata;
//sdk.Close(); tried to uncomment
//accepted.Close(); tried to uncomment
我的方法()
sdk=新套接字(AddressFamily.InterNetwork、SocketType.Stream、ProtocolType.Tcp);
Bind(新的IPEndPoint(IPAddress.Parse(“127.0.0.1”),8052);
听(10);
接受套接字=sdk.Accept();
Buffer=新字节[accepted.SendBufferSize];
int bytesRead=accepted.Receive(缓冲区);
字节[]格式化=新字节[字节读取];
for(int i=0;i”+“+stradata+”\n\n”);
testo=stradata;
//sdk.Close();试图取消注释
//已接受。关闭();试图取消注释
您需要不断地从套接字读取数据,直到您读取了所需的所有数据
sdk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sdk.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8052));
sdk.Listen(10);
Socket accepted = sdk.Accept();
Buffer = new byte[accepted.SendBufferSize];
while (true)
{
// begin reading continually from the socket
// Socket::Receive() will block until it gets some data
// Exception handling required here for when client closes connection
int bytesRead = accepted.Receive(Buffer);
byte[] formatted = new byte[bytesRead];
for (int i = 0; i < bytesRead; i++)
{
formatted[i] = Buffer[i];
}
Debug.Log("\t Server" + "\n");
string stradata = Encoding.ASCII.GetString(formatted);
Debug.Log("-->" + "" + stradata + "\n\n");
// Need to add some exit logic here eg,
if(stradata.Contains("EXIT"))
break;
}
sdk.Close();
accepted.Close();
sdk=newsocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
Bind(新的IPEndPoint(IPAddress.Parse(“127.0.0.1”),8052);
听(10);
接受套接字=sdk.Accept();
Buffer=新字节[accepted.SendBufferSize];
while(true)
{
//从插座开始连续读取
//套接字::Receive()将阻塞,直到它获得一些数据
//当客户端关闭连接时,此处需要异常处理
int bytesRead=accepted.Receive(缓冲区);
字节[]格式化=新字节[字节读取];
for(int i=0;i”+“+stradata+”\n\n”);
//需要在这里添加一些退出逻辑,例如,
如果(stradata.Contains(“退出”))
打破
}
sdk.Close();
已接受。关闭();
连接有三个属性1)源IP地址2)目标IP地址3)端口号。您只能有一个三个属性都相同的连接。您正试图用相同的参数打开第二个连接。@jdweng TCP连接有4个唯一属性,您列出的三个属性加上源端口,源端口通常由操作系统为出站连接自动分配,但是,您可以手动设置。源端口是自动分配的,因此它不是阻止第二次连接的因素。