C# 如何在TCP服务中第二次发送全名?
当我第一次通过TCP服务器将数据发送到客户端时,当我再次发送另一个名称(如在C sharp中检索为(ook)的书)时检索到全名时 客户端代码 sck=新套接字(AddressFamily.InterNetwork、SocketType.Stream、ProtocolType.Tcp); while(true) {C# 如何在TCP服务中第二次发送全名?,c#,sockets,networking,tcp,buffer,C#,Sockets,Networking,Tcp,Buffer,当我第一次通过TCP服务器将数据发送到客户端时,当我再次发送另一个名称(如在C sharp中检索为(ook)的书)时检索到全名时 客户端代码 sck=新套接字(AddressFamily.InterNetwork、SocketType.Stream、ProtocolType.Tcp); while(true) { IPEndPoint localEndPoint; localEndPoint = new IPEndPoint(IPAddress.P
IPEndPoint localEndPoint;
localEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.2"), 1);
try
{
sck.Connect(localEndPoint);
}
catch
{
Console.Write("Unable to connect to remote end point!\r\n");
);
}
Console.Write("Enter Text: ");
string text = Console.ReadLine();
byte[] data = Encoding.ASCII.GetBytes(text);
sck.Send(data);
Console.Write("Data Sent!\r\n");
sck.Close();
Console.ReadLine();
服务器端代码 while(true) { 接受套接字=sck.Accept()
Buffer=新字节[accepted.SendBufferSize];
int bytesRead=accepted.Receive(缓冲区);
字节[]格式化=新字节[字节读取];
for(int i=0;i
有些东西我不明白,你使用缓冲区作为变量,但这是C#中的一种类型,我不知道你在哪里以及如何声明它。
无论如何,我会这样做:
while (true)
{
Socket accepted = sck.Accept();
byte[] buffer = new byte[1024];
int ret=0;
StringBuilder sb= new StringBuilder();
while ((ret=accepted.Receive(buffer)) > 0)
{
sb.Append(Encoding.ASCII.GetString(buffer, 0, ret));
}
Console.Write(sb.ToString() + "\r\n");
accepted.Close();
}
为了在两个套接字之间保持对话,您需要一个称为协议的东西,这意味着您知道何时收到全部数据,然后回复发件人。协议可以是:发送一个包,通知您要发送的内容,主要是消息的长度。另一种方法是在消息中出现内容时停止读取,例如字符串“#END#”返回字符“\r”等。如果您只想发送一条消息并收到回复消息,那么您可以做的一件事是关闭客户端部分,只关闭发送部分Socket.shutdown(SocketShutdown.send);
,这样,发送方告诉接收方它已经发送了所有数据,接收方收到该信号,然后可以向发送方发送回复消息
客户:
sck.Send(data);
Console.Write("Data Sent!\r\n");
// tell the server we have done sending data.
sck.Shutdown(SocketShutdown.Send);
// Now receive from the server
byte[] buffer = new byte[1024];
int ret = 0;
StringBuilder sb = new StringBuilder();
while ((ret = sck.Receive(buffer)) > 0)
{
sb.Append(Encoding.ASCII.GetString(buffer, 0, ret));
}
Console.Write(sb.ToString() + "\r\n");
sck.Close();
服务器
while (true)
{
Socket accepted = sck.Accept();
byte[] buffer = new byte[1024];
int ret=0;
StringBuilder sb= new StringBuilder();
while ((ret=accepted.Receive(buffer)) > 0)
{
sb.Append(Encoding.ASCII.GetString(buffer, 0, ret));
}
Console.Write(sb.ToString() + "\r\n");
byte[] reply = Encoding.ASCII.GetBytes("I've got it!");
accepted.Send(reply);
accepted.Close();
}
我将缓冲区作为属性谢谢ja_mesa的回答我还有一个问题..我为客户端发送和服务器接收制作的这个程序我如何为服务器回复客户端.服务器发送任意文本和客户端接收你能帮助我吗每当客户端发送数据和服务器时..这里是客户端发送任意文本和服务器接收t当服务器向客户端发送数据时,我想在服务器发送数据时进行聊天。打开一个新问题,在这个站点中搜索类似的问题。套接字对话框、套接字聊天等,当然已经有很多问题被问到并回答了。我很高兴它对您有效,非常欢迎您。
while (true)
{
Socket accepted = sck.Accept();
byte[] buffer = new byte[1024];
int ret=0;
StringBuilder sb= new StringBuilder();
while ((ret=accepted.Receive(buffer)) > 0)
{
sb.Append(Encoding.ASCII.GetString(buffer, 0, ret));
}
Console.Write(sb.ToString() + "\r\n");
byte[] reply = Encoding.ASCII.GetBytes("I've got it!");
accepted.Send(reply);
accepted.Close();
}