Socket之TCP/IP服务器代码框架

server

#include <stdio.h>
#include <sys/types.h> 
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>

/*
TCP服务器创建
*/
int main(int argc,char **argv)
{
	int tcp_server_fd; //服务器套接字描述符
	int tcp_client_fd; //客户端套接字描述符
	struct sockaddr_in tcp_server;
	struct sockaddr_in tcp_client;
	socklen_t tcp_client_addrlen=0;
	int tcp_server_port;  //服务器的端口号
	
	 //判断传入的参数是否合理
	if(argc!=2)
	{
		printf("参数格式:./tcp_server <端口号>\n");
		return -1;
	}
	tcp_server_port=atoi(argv[1]); //将字符串转为整数
	
	/*1. 创建网络套接字*/
	tcp_server_fd=socket(AF_INET,SOCK_STREAM,0);
	if(tcp_server_fd<0)
	{
		printf("TCP服务器端套接字创建失败!\n");
		return -1;
	}
	
	/*2. 绑定端口号,创建服务器*/
	tcp_server.sin_family=AF_INET; //IPV4协议类型
	tcp_server.sin_port=htons(tcp_server_port);//端口号赋值,将本地字节序转为网络字节序
	tcp_server.sin_addr.s_addr=INADDR_ANY; //将本地IP地址赋值给结构体成员
	
	if(bind(tcp_server_fd,(const struct sockaddr*)&tcp_server,sizeof(struct sockaddr))<0)
	{
		printf("TCP服务器端口绑定失败!\n");
		return -1;
	}
	
	/*3. 设置监听的客户端数量*/
	listen(tcp_server_fd,10);
	
	/*4. 等待客户端连接*/
	tcp_client_addrlen=sizeof(struct sockaddr);
	tcp_client_fd=accept(tcp_server_fd,(struct sockaddr *)&tcp_client,&tcp_client_addrlen);
	if(tcp_client_fd<0)
	{
		printf("TCP服务器:等待客户端连接失败!\n");
		return -1;
	}
	
	//打印连接的客户端地址信息
	printf("已经连接的客户端信息: %s:%d\n",inet_ntoa(tcp_client.sin_addr),ntohs(tcp_client.sin_port));
	
	/*5. 数据通信*/
	write(tcp_client_fd,"123456789",10); //将数据发送给客户端
	
	/*6. 关闭连接*/
	close(tcp_client_fd);
}


client

#include <stdio.h>
#include <sys/types.h> 
#include <sys/socket.h>
#include <stdlib.h>
#include <arpa/inet.h>


/*
TCP客户端创建
*/
int main(int argc,char **argv)
{
	int tcp_client_fd; //客户端套接字描述符
	int Server_Port;    //服务器端口号
	struct sockaddr_in tcp_server; //存放服务器的IP地址信息
	char rx_buff[1024];
	int  rx_len;
	
	if(argc!=3)
	{
		printf("TCP客户端形参格式:./tcp_client <服务器IP地址>  <服务器端口号>\n");
		return -1;
	}
	
	Server_Port=atoi(argv[2]); //将字符串的端口号转为整型
	
	/*1. 创建网络套接字*/
	tcp_client_fd=socket(AF_INET,SOCK_STREAM,0);
	if(tcp_client_fd<0)
	{
		printf("TCP服务器端套接字创建失败!\n");
		return -1;
	}
	
	/*2. 连接到指定的服务器*/
	tcp_server.sin_family=AF_INET; //IPV4协议类型
	tcp_server.sin_port=htons(Server_Port);//端口号赋值,将本地字节序转为网络字节序
	tcp_server.sin_addr.s_addr=inet_addr(argv[1]); //IP地址赋值
	
	if(connect(tcp_client_fd,(const struct sockaddr*)&tcp_server,sizeof(const struct sockaddr))<0)
	{
		 printf("TCP客户端: 连接服务器失败!\n");
		 return -1;
	}
	
	/*3. 数据通信*/
	rx_len=read(tcp_client_fd,rx_buff,1024);
	printf("客户端接收的数据:%d,%s\n",rx_len,rx_buff);
	
	/*4. 关闭连接*/
	close(tcp_client_fd);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值