gpt4 book ai didi

C Socket 客户端打印出奇怪的输出

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:50 25 4
gpt4 key购买 nike

我正在尝试从 Linux 服务器客户端(我使用环回接口(interface))向 Linux 套接字客户端发送一个 .txt 文件。我尝试发送一个字符串,即“OK”,一切正常,但是当我尝试发送一个文件时,客户端打印出一个奇怪的输出。显然,我已经完成了之前的所有步骤,例如套接字、连接、接受、监听等。

这是服务器端代码:

printf("Sending file\n);
if ((fp=fopen(filename, "r"))!=NULL){
while ( (nbytes = fread(sendline, sizeof(char), 512, fp) > 0)){
printf("%s\n",sendline);
sent = writen(clientfd, sendline, nbytes);
}
close(fp);
}else
perror("Open file");

'writen' 函数是:

ssize_t writen(int fd, const void *vptr, size_t n){
/* Write "n" bytes to a descriptor. */
size_t nleft;
ssize_t nwritten;
const char *ptr;

ptr = vptr;
nleft = n;
while (nleft > 0) {
if ( (nwritten = write(fd, ptr, nleft)) <= 0) {
if (nwritten < 0 && errno == EINTR)
nwritten = 0; /* and call write() again */
else
return(-1); /* error */
}

nleft -= nwritten;
ptr += nwritten;
}
return(n);
}

客户端代码为:

   while (fgets(sendline, 10000,stdin) != NULL)
{
sendto(sockfd,sendline,strlen(sendline),0,
(struct sockaddr *)&servaddr,sizeof(servaddr));
read(sockfd,recvline,10000);
fputs(recvline,stdout);
recvline[n]=0;
if((recvline[0]=='-')&&(recvline[1]=='E')&&(recvline[2]=='R')&&(recvline[3]=='R')){
close(sockfd);
exit(1);
}

我得到的陌生客户在图像中。 Client Output

那么我的错误是什么?为什么我会收到这种输出,我该如何解决?

最佳答案

几个问题,

在服务器代码中,括号不正确,

while ( (nbytes = fread(sendline, sizeof(char), 512, fp) > 0)){

应该是

while ( (nbytes = fread(sendline, sizeof(char), 512, fp)) > 0){
---------^ parenthesis close here

并且在客户端,在recvline中设置'\0',然后打印为

n = read(sockfd,recvline,10000);
recvline[n] = '\0'
fputs(recvline,stdout);

关于C Socket 客户端打印出奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17114490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com