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);
}