linux socket programming simple entry

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.

 

Guess you like

Origin blog.csdn.net/wwxy1995/article/details/94360004