C# 从项目列表c发送数据#

C# 从项目列表c发送数据#,c#,list,sockets,client-server,C#,List,Sockets,Client Server,我有一个列表,其中包含许多我试图发送到服务器的消息。 这是我的代码: private void sendBtn_Click(object sender, EventArgs e) { for (int i = 0; i < listORequestedCommands.Items.Count; i++) { clientSock.Send(Encoding.Default.GetBytes(listORequested

我有一个列表,其中包含许多我试图发送到服务器的消息。 这是我的代码:

    private void sendBtn_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < listORequestedCommands.Items.Count; i++)
        {
            clientSock.Send(Encoding.Default.GetBytes(listORequestedCommands.Items[i].ToString()));
        }
        removeAll_Click(sender, e);
        sendBtn.Enabled = false;
    }
private void sendBtn\u单击(对象发送者,事件参数e)
{
对于(int i=0;i
但是,当我单击send按钮时,我看到服务器接收到一条消息,其中包含所有连接的列表项,而不是接收分开的消息


有什么想法吗?

实施一个协议。TCP套接字是基于流的,而不是基于消息的。

您应该等待确认,因为您没有等待字节被收集并显示为合并结果。 将数据发送到套接字后,应该使用如下代码

int bytesRec = clientSock.Receive(bytes);

在这个URL之后

什么类型是
clientSock
?如何分离?在每条消息之后发送一条换行符或其他内容。Idanis,CodeCaster的意思是TCP不尊重消息边界。分别发送4个字节1200次与在一次呼叫中发送4800个字节(到接收端)相同。您必须添加某种语法(即实现协议)来解析和界定消息。一个基本的例子是在每条消息的前面加上4字节的整数长度,这样你就知道消息在哪里结束,下一条消息从哪里开始
clientSock
是一个
Socket
。Jason和CodeCaster,我不明白的是:当我单击“发送”时,有一条消息正在发送,然后,在仍然连接的情况下,我只是将该消息替换为一条新消息,仍然有一条消息,然后再次单击“发送”,新消息将再次正确发送。这与我正在做的有什么不同?@Idanis这是经常被问到的问题,如果我有时间,我会尝试查找或创建一个参考问题/社区wiki。底线:一侧的一个
send()
不会导致另一侧的一个
receive()
。这是由Nagle算法引起的,但简单地禁用它并不能解决您的问题。如果在每条消息前加上4个字节(
Int32
int
)来描述消息长度,服务器可以先读取长度N,然后再读取N个字节。正在尝试像您所说的那样搜索解决方案。@Idanis看一下,