UNIX网络编程——TCP协议API 基础demo服务器代码

        

目录

一.TCP客户端API

1.创建套接字

2.connect连接服务器​编辑

 3.send发送信息

 4.recv接受信息

 5.close

 二.TCP服务器API

1.socket创建tcp套接字(监听套接字)

2.bind给服务器套接字绑定port,ip地址信息

3.listen监听并创建连接队列

4.accept提取客户端的连接

5.send,recv

​编辑

6.close

实例:基于TCP客户端与服务器的实现与代码联调

UNIX网络编程——TCP协议API 基础demo服务器代码_第1张图片

一.TCP客户端API

1.创建套接字

2.connect连接服务器UNIX网络编程——TCP协议API 基础demo服务器代码_第2张图片

 3.send发送信息

UNIX网络编程——TCP协议API 基础demo服务器代码_第3张图片

 4.recv接受信息

UNIX网络编程——TCP协议API 基础demo服务器代码_第4张图片

 5.close

 二.TCP服务器API

1.socket创建tcp套接字(监听套接字)

2.bind给服务器套接字绑定port,ip地址信息

UNIX网络编程——TCP协议API 基础demo服务器代码_第5张图片

3.listen监听并创建连接队列

UNIX网络编程——TCP协议API 基础demo服务器代码_第6张图片

4.accept提取客户端的连接

UNIX网络编程——TCP协议API 基础demo服务器代码_第7张图片

UNIX网络编程——TCP协议API 基础demo服务器代码_第8张图片

5.send,recv

UNIX网络编程——TCP协议API 基础demo服务器代码_第9张图片

UNIX网络编程——TCP协议API 基础demo服务器代码_第10张图片

6.close

close(套接字)会导致对方recv收到0长度报文

实例:基于TCP客户端与服务器的实现与代码联调

#include 
#include
#include     //memset
#include  //htos
#include  //socket
#include //struct sockaddr
#include  //close
#include
 
void ser() //服务端
{
	//第一步建立套接字
	int ser_sk = socket(PF_INET, SOCK_STREAM, 0); 

	//第二步建立地址信息,并用bind进行绑定
	struct sockaddr_in ser_add ;				   //建立服务端套接字地址结构
	memset(&ser_add, 0, sizeof ser_add);          
	ser_add.sin_family = AF_INET;				   //填写对应的port,ip,协议族
	ser_add.sin_port = htons(9100);
	ser_add.sin_addr.s_addr = htonl(INADDR_ANY);   //记得转换为网络字节序
	bind(ser_sk,(struct sockaddr *)&ser_add,sizeof ser_add);  //绑定IP,port


	//第三步监听套接字,创建连接队列
	listen(ser_sk, 5);  

	//第四步进行accpet连接通信
	struct sockaddr_in cli_add;
	socklen_t cli_len = sizeof cli_add;
	sleep(1);
	int cli_sk = accept(ser_sk,(struct sockaddr *)&cli_add , &cli_len);  //建立连接,获得通信套接字,和对方套接字信息
	
	//接受信息
	unsigned char buffer[1500] = "";
	char ip[16] = "";
	unsigned short port = 0;

	inet_ntop(AF_INET, &cli_add.sin_addr.s_addr,ip,16); //把32为ip地址转化为字符串
	port = ntohs(cli_add.sin_port);  //网络字节序转化为主机字节序


	printf("客户端:%s %d  connnected\n",ip,port);
	int len = recv(cli_sk, buffer, sizeof buffer , 0);   //接受信息
	printf("%s\n", buffer);
	close(ser_sk);
}


void cli()    //客户端
{
	//第一步:建立套接字
	int cli_sk = socket(PF_INET, SOCK_STREAM, 0);  //建立客户端套接字

	//第二步建立发送到的地址结构
	struct sockaddr_in ser_add;		
	memset(&ser_add, 0, sizeof ser_add);
	
	ser_add.sin_family = AF_INET; 
	ser_add.sin_addr.s_addr = inet_addr("127.0.0.1");
	ser_add.sin_port = htons(9100);

	//第三步骤建立连接,给客户端分配端口
	connect(cli_sk, (struct sockaddr*)&ser_add, sizeof ser_add);  

	//第四步发送信息
	const char* buffer = "hello world";
	send(cli_sk, buffer, 11, 0);  

	close(cli_sk);
}

void pra() {

	pid_t pid = fork();
	if (pid == 0)
	{
		sleep(1);
		//开启客户端
		cli();
		
	}
	else if(pid > 0){
		//开启服务端
		ser();
		int status = 0;
		wait(&status);
	}

}

int main() {

	pra();
	return 0;
}

 运行结果:

你可能感兴趣的:(网络,tcp/ip,服务器)