0
我有一个连接到服务器的下面的客户端代码:客户端的Socket FPUTS
#include<stdio.h> //printf
#include<string.h> //strlen
#include<sys/socket.h> //socket
#include<arpa/inet.h> //inet_addr
int main(int argc , char *argv[])
{
int sock;
struct sockaddr_in server;
char message[1024], server_reply[2000];
//Create socket
sock = socket(AF_INET , SOCK_STREAM , 0);
if (sock == -1)
{
printf("Could not create socket");
}
puts("Socket created");
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_family = AF_INET;
server.sin_port = htons(8888);
//Connect to remote server
if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)
{
perror("connect failed. Error");
return 1;
}
puts("Connected\n");
puts("Bienvenido al Chatroom, puedes empezar a escribir en la sala!");
//keep communicating with server
while(1)
{
printf("Enter message: ");
fgets(message, 1024 ,stdin);
//scanf("%s" , message);
//Send some data
if(send(sock , message , 1024 , 0) < 0)
{
puts("Send failed");
return 1;
}
//Receive a reply from the server
if(recv(sock , server_reply ,2000, 0) < 0)
{
puts("recv failed");
break;
}
puts(server_reply);
}
close(sock);
return 0;
}
每当我通过套接字发送邮件时,服务器相呼应的信息返回给客户端。它大部分时间都在使用,但是在迭代几次消息之后,回声开始失败。这是一个失败的例子。
输入消息:您好!服务器答复:你好!
输入消息:你从哪里来?服务器回复:你来自哪里?
Enter Message:Nice!服务器回复:很好!你是从?
输入消息:你呢?服务器重放:你呢?你来自?
因此,似乎不知何故,我保持垃圾的标准输出缓冲器或类似的东西。我真的不知道它是什么。代码有什么问题,或者只是简单地修正与fputs有关的问题? (也许它与消息和server_reply数组的大小有关)。
谢谢回答!我明白memset试图做什么,但它仍然行不通。不应该与服务器有任何关系,这就是为什么我没有把它放在这里,但我没有选择:/ –
@FranciscoArriagadaArroyo在服务器端,你应该使用memset,就在从客户端读取之前 –
仍然不会工作,但无论如何,我要继续努力,必须有一些我在这里没有看到的东西。 –