C、 操纵服务器/客户端代码使其在接受时写入消息?

C、 操纵服务器/客户端代码使其在接受时写入消息?,c,client,C,Client,这个问题使用server.c和client.c的代码 我希望服务器在客户端连接后向客户端发送消息 正如您在文章中看到的,代码所做的是让服务器等待客户机连接,侦听它,然后打印出客户机给它的消息,以及给客户机的警报 以下是我为解决我的问题所做的努力(其他一切都是一样的)。服务器: 。。。 newsockfd=接受(sockfd, (结构sockaddr*)和cli_addr, &克莱伦); if(newsockfd

这个问题使用server.c和client.c的代码

我希望服务器在客户端连接后向客户端发送消息

正如您在文章中看到的,代码所做的是让服务器等待客户机连接,侦听它,然后打印出客户机给它的消息,以及给客户机的警报

以下是我为解决我的问题所做的努力(其他一切都是一样的)。服务器:

。。。
newsockfd=接受(sockfd,
(结构sockaddr*)和cli_addr,
&克莱伦);
if(newsockfd<0)
错误(“接受错误”);
其他的
{
写(newsockfd,“我收到你的消息”,18);
}
....
在客户端,(同样,其他一切都一样):

。。。
if(connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0)
错误(“连接错误”);
b0(缓冲器,256);
读取(sockfd,缓冲区,255);
...
看起来我应该可以用这两行来做这件事。但代码的行为与原始代码完全相同!发生了什么事?

对于服务器,插入

 bzero(buffer,256);
 n = write(newsockfd,"Client connected", 16);
 if (n < 0) error("ERROR writing to socket");
connect()之后


这是你想要的吗?我认为您应该能够从现有代码的其余部分进行推断。

我不太明白您的意思。在普通代码中,客户端将您键入的消息发送到服务器,服务器回复“我收到了您的消息”,客户端显示。这证明了你的目标。如果您想更改读写顺序,请更改您的问题。@CrendKing我只想让服务器在客户端连接后做出响应。这看起来很琐碎,但由于某种原因,它比预期的更难。啊哈!是的,没错。你能解释一下我上面的代码有什么问题吗?为什么挂断了?不,你的代码对我来说很好。有什么问题吗?您是否指定了相同的端口?为了便于将来参考,当您编写真正的网络代码时,请注意
读取
写入
可能输入和输出少于您的请求。您需要循环检查返回值,直到读取或写入请求的字节数。
...
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
    error("ERROR connecting");
bzero(buffer,256);
read(sockfd,buffer,255);
...
 bzero(buffer,256);
 n = write(newsockfd,"Client connected", 16);
 if (n < 0) error("ERROR writing to socket");
bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0) 
     error("ERROR writing to socket");
printf("%s\n", buffer);