我最近在c中制作了一个服务器客户端程序,但是它似乎不起作用。我在编译时得到的唯一信息是警告,并且客户端存在故障。有人可以帮我一下吗?
这是服务器代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
int server_socket;
server_socket = socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in server_address;
int addrlen = sizeof(server_address);
server_address.sin_family = AF_INET;
server_address.sin_port = htons(9000);
server_address.sin_addr.s_addr = INADDR_ANY;
bind (server_socket, (struct sockaddr*) &server_address, sizeof(server_address));
int client_socket;
listen(server_socket, 3);
client_socket=accept(server_socket, NULL, (socklen_t*)&addrlen);
char response[256];
recv(server_socket, &response, sizeof(response), 0);
printf("%s",response);
pclose (server_socket);
return (0);
}
这是客户代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
int network_socket;
network_socket = socket(AF_INET,SOCK_STREAM, 0);
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(9000);
server_address.sin_addr.s_addr = INADDR_ANY;
int connection_status = connect(network_socket, (struct sockaddr*)&server_address, sizeof(server_address));
if (connection_status == -1) { printf("ERROR"); }
char maw[256] = "this is a message"; send(network_socket, maw, sizeof(maw), 0); close(server_address);
return(0);
pclose(network_socket);
}
服务器代码中也有错误。
服务器代码:
[要从客户端接收消息时,必须在client_socket
功能的代码中使用recv()
。不是server_socket
本身。
客户代码:
为什么使用pclose()
功能关闭插座?它用于管道,需要FILE
指针。此外,该函数永远不会被调用(在return语句之后)。
这应该工作(在我的系统上测试):
服务器:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
int server_socket;
server_socket = socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in server_address;
int addrlen = sizeof(server_address);
server_address.sin_family = AF_INET;
server_address.sin_port = htons(9000);
server_address.sin_addr.s_addr = INADDR_ANY;
bind (server_socket, (struct sockaddr*) &server_address, sizeof(server_address));
int client_socket;
listen(server_socket, 3);
client_socket=accept(server_socket, NULL, (socklen_t*)&addrlen);
char response[256];
recv(client_socket, &response, sizeof(response), 0);
printf("%s",response);
shutdown (client_socket, SHUT_RDWR);
close (client_socket);
shutdown (server_socket, SHUT_RDWR);
close (server_socket);
return (0);
}
客户:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
int network_socket;
network_socket = socket(AF_INET,SOCK_STREAM, 0);
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(9000);
server_address.sin_addr.s_addr = INADDR_ANY;
int connection_status = connect(network_socket, (struct sockaddr*)&server_address, sizeof(server_address));
if (connection_status == -1) { printf("ERROR"); }
char maw[256] = "this is a message";
send(network_socket, maw, sizeof(maw), 0);
shutdown (network_socket, SHUT_RDWR);
close(network_socket);
return(0);
}
关于功能shutdown()
,请参见此answer。