c语言 - 我在套接字程序中'Received: 艎��'了一些奇怪的单词



我编写了一个服务器程序和一个客户端程序,它们与linux ubuntu上的套接字通信。客户端程序输出Received: 艎��

这是我的服务器代码:

/*** tcp_server.c ***/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
int main() {
int sock_fd, new_fd, bytes;
struct sockaddr_in seraddr, cliaddr;
char data[1024];
socklen_t cli_addr_size;
cli_addr_size = sizeof(cliaddr);
sock_fd = socket(AF_INET, SOCK_STREAM, 0);
memset(&seraddr, 0, sizeof(seraddr));
seraddr.sin_family = AF_INET;
seraddr.sin_addr.s_addr = htonl(INADDR_ANY); // INADDR_ANY : It received Network Interface that connected server defined interface, htonl :  
seraddr.sin_port = htons(5050);
bind(sock_fd, (struct sockaddr *)&seraddr, sizeof(seraddr));
listen(sock_fd, 10);
while (1) {
new_fd = accept(sock_fd, (struct sockaddr *)&cliaddr, &cli_addr_size);
bytes = recv(new_fd, data, 1024, 0);
send(new_fd, data, bytes, 0);
close(new_fd);
}   
close(sock_fd);
}

我的客户代码是:

/*** tcp_client.c ***/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
int main(int argc, char *argv[]) {
int sock_fd, bytes;
struct sockaddr_in ser_addr;
char *snddata, rcvdata[1024];
snddata = argv[2];
sock_fd = socket(AF_INET, SOCK_STREAM, 0);
memset(&ser_addr, 0,sizeof(ser_addr));
ser_addr.sin_family = AF_INET;
ser_addr.sin_addr.s_addr = inet_addr(argv[1]); // INADDR_ANY : It received Network Interface that connected server defined interface, htonl :  
ser_addr.sin_port = htons(5050);
connect(sock_fd, (struct sockaddr *)&ser_addr, sizeof(ser_addr));
send(sock_fd, snddata, strlen(snddata), 0);
printf("Received: ");

bytes = recv(sock_fd, rcvdata, 1024, 0);
rcvdata[bytes] = '';
printf("%sn", rcvdata);
close(sock_fd);
}

首先,我得到了accept的参数3的错误,然后我更改了

new_fd = accept(sock_fd, (struct sockaddr *)&cliaddr, sizeof(cliaddr);

但它仍然产生了这个奇怪的词。

尝试更改send((和receive((函数,以便您可以完全控制从缓冲区(data[1024](发送多少字节和哪个字节,如本线程中所示:C套接字:recv并发送所有数据,另请参阅Beej的网络编程指南(http://beej.us/guide/bgnet/(

还要确保初始化数据缓冲区:

data[1024] = "";
rcvdata[1024] = "";

data[1024];
data[0] = '';
rcvdata[1024];
rcvdata[0] = '';

,背景在这个线程中:为什么我通过打印字符串来获得这个异常的符号

最新更新