Development environment VS2019 add Ubuntu virtual machine environment with reference to the relevant blog
The server side, there are socket, bind, listen, accept, write, close six functions
The client has a socket, connect, write, close four functions
Server-side code
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
void error_handing(char* message);
int main()
{
int serv_sock; // 服务器sock
int clnt_sock; // 客户端sock
struct sockaddr_in serv_addr; // 服务器地址
struct sockaddr_in clnt_addr; // 客户端地址
// 创建
serv_sock = socket(PF_INET, SOCK_STREAM, 0);
if (serv_sock == -1)
error_handing("socket() error");
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = 9999; // 端口
serv_addr.sin_addr.s_addr = INADDR_ANY; // ip
// 绑定
if (bind(serv_sock, (struct sockaddr*) & serv_addr, sizeof(serv_addr)) == -1)
error_handing("bind() error");
// 监听
if (listen(serv_sock, 5) == -1)
error_handing("listen() error");
// 等待接受连接
socklen_t clnt_addr_size = sizeof(clnt_addr);
clnt_sock = accept(serv_sock, (struct sockaddr*) & clnt_addr, &clnt_addr_size);
if(clnt_sock==-1)
error_handing("accept() error");
char message[] = "Hello World";
write(clnt_sock, message, sizeof(message)); // 像客户端发送一条数据
close(clnt_sock);
close(serv_sock);
return 0;
}
void error_handing(char* message)
{
fputs(message, stderr);
fputs("\n", stderr);
exit(1);
}
Client code
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
void error_handing(char* message);
int main()
{
int sock;
struct sockaddr_in serv_addr;
// 创建socket
sock = socket(PF_INET, SOCK_STREAM, 0);
if (sock == -1)
error_handing("socket() error");
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = 9999; // 端口
serv_addr.sin_addr.s_addr = INADDR_ANY; // ip
if (connect(sock, (struct sockaddr*) & serv_addr, sizeof(serv_addr)) == -1)
error_handing("connect() error");
char message[30];
int str_len = read(sock, message, sizeof(message));
if (str_len == -1)
error_handing("read error");
printf("Message from server : %s \n", message);
close(sock);
return 0;
}
void error_handing(char* message)
{
fputs(message, stderr);
fputs("\n", stderr);
exit(1);
}
Brief listen and accept the difference, accept only the beginning of a listening state, accept waiting, will be back up here, if the client is connected, it will go down.