利用套接字(socket)实现通讯,client发送两个数,server接收并返回这两个数的和
server.c
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
int main()
{
int server_sockfd,client_sockfd;
int server_len,client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
server_sockfd=socket(AF_INET,SOCK_STREAM,0);
server_address.sin.family=AF_INET;
server_address.sin_addr.s_addr=inet_addr("10.0.3.206");
server_address.sin_port=9734;
server_len=sizeof(server_address);
bind(server_sockfd,(struct sockaddr *) &server_address,server_len);
listen(server_sockfd,5);
while(1)
{
int a,b;
printf("服务器等待消息\n");
client_len=sizeof(client_address);
client_sockfd=accept(server_sockfd,(struct sockaddr *)
&client_address,(socklen_t *__restrict) &client_len);
read(client_sockfd,&a,sizeof(a));
read(client_sockfd,&b,sizeof(b));
a+=b;
write(client_sockfd,&a,sizeof(a));
close(client_sockfd);
}
}
client.c
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h> //包含套接字函数库
#include<netinet/in.h> //包含AF_INET相关结构
#include<arpa/inet.h> //包含AF_INET相关操作的函数
#include<unistd.h> //包含read(),write()函数
int main()
{
int sockfd; //用于保存客户套接字表示符
int len; //用于保存客户信息长度
struct sockaddr_in address; //定义客户套接字地址
int result; //判断错误信息
int a=97,b=5; //定义传送信息
sockfd=socket(AF_INET,SOCK_STREAM,0); //定义套接字类型
address.sin_family=AF_INET; //定义套接字地址中的域
address.sin_addr.s_addr=inet_addr("10.0.3.206"); //定义套接字的地址
address.sin_port=9734; //定义套接字端口
len=sizeof(address);
result=connect(sockfd,(struct *) &address,len); //请求连接
if(result==-1) //判断是否成功连接
{
perror("连接失败");
return 1;
}
write(sockfd,&a,sizeof(a)); //向服务器传送信息
write(sockfd,&b,sizeof(b));
read(sockfd,&a,sizeof(a)); //从服务器接收信息
printf("来自服务器的消息%d\n",a);
close(sockfd); //关闭连接
return 0;
}