首页 文章

在socket上发送和接收

提问于
浏览
2

我创建一个java套接字服务器和c套接字客户端,这里是代码

Java套接字服务器:

int Send_Request(String s) {

    try {
        os = socket.getOutputStream();
        os.write(s.getBytes());
        os.flush();

        Log.d(tag,"Data = " + s);

        return 0;
    } catch (IOException e) {
        // TODO Auto-generated catch block
        Log.e(tag,"Send Request Error");
        return -1;
    }

C套接字客户端:

void* recv_request()
{
int i,in;
char buf[1024];
while(1)
{
    if ( ( in = read(sockfd, buf, strlen(buf)) ) != -1 )
    {
        LOGD("Received = %s ...",buf);
        sendServerCutText(buf);
        memset(buf,0,strlen(buf));
    }

}

}

问题是..当我从服务器发送时,它在flush()上阻塞,c客户端在调用另一个Send_Request之前无法接收 .

问题出在哪儿??

1 回答

  • 3

    有一个概念上的问题 . 您认为TCP是面向消息的(发送具有指定长度的消息) . 它不是那样的,它只提供一个字节流 .

    为了发送具有指定长度的消息,常见的技术是首先发送长度(以固定长度编码,例如以网络字节顺序的4字节整数)然后发送实际消息 .

    还有一个实现问题,read的第三个参数应该是最大读取长度,应该是1024,在非初始化的本地char数组上执行 strlen 显然是未定义的行为 .

相关问题