Tôi đang cố gắng triển khai máy chủ/máy khách TCP bằng cách sử dụng các ổ cắm trong c. Tôi đã viết chương trình theo cách mà mọi thứ chúng tôi gửi trên máy khách đều được hiển thị từng dòng trong máy chủ cho đến khi gõ lệnh thoát. Chương trình chạy nhưng cuối cùng dữ liệu lại hiển thị trên máy chủ. Ai đó có thể kiểm tra mã?
máy chủ TCP
#include
#include
#include
#include
#include
chủ yếu()
{
char buf[100];
socklen_t len;
int k,sock_desc,temp_sock_desc;
struct sockaddr_in máy khách, máy chủ;
memset(&client,0,sizeof(client));
memset(&server,0,sizeof(server));
sock_desc = socket(AF_INET,SOCK_STREAM,0);
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_port = 7777;
k = bind(sock_desc,(struct sockaddr*)&server,sizeof(server));
k = nghe(sock_desc,20);
len = sizeof(client);
temp_sock_desc = chấp nhận(sock_desc,(struct sockaddr*)&client,&len);
while(1)
{
k = recv(temp_sock_desc,buf,100,0);
if(strcmp(buf,"exit")==0)
phá vỡ;
nếu(k>0)
printf("%s",buf);
}
đóng(sock_desc);
đóng(temp_sock_desc);
return 0;
}
máy khách TCP
#include
#include
#include
#include
#include
chủ yếu()
{
char buf[100];
cấu trúc máy khách sockaddr_in;
int sock_desc,k;
sock_desc = socket(AF_INET,SOCK_STREAM,0);
memset(&client,0,sizeof(client));
client.sin_family = AF_INET;
client.sin_addr.s_addr = inet_addr("127.0.0.1");
client.sin_port = 7777;
k = connect(sock_desc,(struct sockaddr*)&client,sizeof(client));
while(1)
{
được(buf);
k = gửi(sock_desc,buf,100,0);
if(strcmp(buf,"exit")==0)
phá vỡ;
}
đóng(sock_desc);
return 0;
}
trong khi(1){
k = recv(temp_sock_desc,buf,100,0);
if(memcmp(buf,"exit", 4)==0)
phá vỡ;
nếu(k>0)
printf("%*.*s", k, k, buf);
}
Kết quả của recv() không phải là một chuỗi và do đó sẽ không bị chấm dứt. Cách "sửa" ở trên không hoàn toàn chính xác, nó chỉ nhằm chỉ cho bạn đi đúng hướng.
Tôi là một lập trình viên xuất sắc, rất giỏi!