结构体说明
typedef unsigned short int sa_family_t;
struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
};
typedef uint16_t in_port_t;
typedef uint32_t in_addr_t;
struct in_addr{
in_addr_t s_addr;
};
struct sockaddr_in {
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[sizeof (struct sockaddr) -
(sizeof (unsigned short int)) -
sizeof (in_port_t) -
sizeof (struct in_addr)];
};
服务端
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
#define SERVER_PORT 8088
int main() {
int fd_server, fd_client;
struct sockaddr_in addr_server;
addr_server.sin_family = AF_INET;
addr_server.sin_addr.s_addr = htonl(INADDR_ANY);
addr_server.sin_port = htons(SERVER_PORT);
struct sockaddr_in addr_client;
int addr_client_len = sizeof(addr_client);
char buf[1024];
int recv_num;
fd_server = socket(AF_INET, SOCK_STREAM, 0);
if (fd_server < 0) {
printf("Create error.\n");
exit(-1);
}
if (bind(fd_server, (struct sockaddr *) &addr_server, sizeof(addr_server)) < 0) {
printf("Bind error.\n");
exit(-1);
}
if (listen(fd_server, 5) < 0) {
printf("Listen error.\n");
exit(-1);
}
while (1) {
printf("Listening port: %d\n", SERVER_PORT);
fd_client = accept(fd_server, (struct sockaddr *) &addr_client,
(socklen_t * ) & addr_client_len);
if (fd_client < 0) {
printf("Accept error.\n");
exit(-1);
}
char *ip = inet_ntoa(addr_client.sin_addr);
int port = htons(addr_client.sin_port);
printf("Connected, client ip/port: %s/%d.\n", ip, port);
while (1) {
recv_num = recv(fd_client, buf, 1024, 0);
buf[recv_num] = '\0';
printf("Recv from client: %s\n", buf);
if (strcmp(buf, "exit") == 0) {
break;
}
printf("Send to client:");
scanf("%s", buf);
printf("\n");
send(fd_client, buf, strlen(buf), 0);
if (strcmp(buf, "exit") == 0) {
break;
}
}
}
close(fd_server);
return 0;
}
客户端
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
#define SERVER_PORT 8088
int main() {
int fd_client;
struct sockaddr_in addr_server;
addr_server.sin_family = AF_INET;
addr_server.sin_addr.s_addr = inet_addr("127.0.0.1");
addr_server.sin_port = htons(SERVER_PORT);
char buf_send[1024];
char buf_recv[1024];
int recv_num;
fd_client = socket(AF_INET, SOCK_STREAM, 0);
if (fd_client < 0) {
printf("Create error.\n");
exit(-1);
}
if (connect(fd_client, (struct sockaddr *) &addr_server, sizeof(addr_server)) < 0) {
printf("Connect error.\n");
exit(-1);
}
printf("Connect success.\n");
while (1) {
printf("Send to server:");
scanf("%s", buf_send);
printf("\n");
send(fd_client, buf_send, strlen(buf_send), 0);
if (strcmp(buf_send, "exit") == 0) {
break;
}
recv_num = recv(fd_client, buf_recv, 1024, 0);
buf_recv[recv_num] = '\0';
printf("Recv from server: %s\n", buf_recv);
}
close(fd_client);
return 0;
}