利用套接字(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;
}