1.client.c
2.server.c
3.Makefile
1.client.c
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/socket.h>
int main()
{
int BUFFER_SIZE=256;
//创建一个套接字,并检测是否创建成功
int sockCli = socket(AF_INET, SOCK_DGRAM, 0);
if(sockCli == -1){
perror("socket create failed!");
}
// server addr
struct sockaddr_in addrSer; //创建一个记录地址信息的结构体
addrSer.sin_family = AF_INET; //使用AF_INET协议族
addrSer.sin_port = htons(60450); //设置地址结构体中的端口号
addrSer.sin_addr.s_addr = inet_addr("127.0.0.1"); //设置通信ip
/*addrSer.sin_addr.s_addr = inet_addr("192.168.70.1"); //设置通信ip*/
//client addr
struct sockaddr_in addrCli; //创建一个记录地址信息的结构体
addrCli.sin_family = AF_INET; //使用AF_INET协议族
addrCli.sin_port = htons(61450); //设置地址结构体中的端口号
addrCli.sin_addr.s_addr = inet_addr("127.0.0.1"); //设置通信ip
/*addrCli.sin_addr.s_addr = inet_addr("192.168.3.169"); //设置通信ip*/
//clent port bind
//将套接字地址与所创建的套接字号联系起来,并检测是否绑定成功
socklen_t addrlen = sizeof(struct sockaddr);
int res = bind(sockCli,(struct sockaddr*)&addrCli, addrlen);
if(res == -1){
perror("bind failed!");
}
char sendbuf[256]; //申请一个发送数据缓存区
char recvbuf[256]; //申请一个接收数据缓存区
while(1){
//向server端发送数据
printf("ccccccccccccccccc, send to ser:>");
scanf("%s",sendbuf);
sendto(sockCli, sendbuf, strlen(sendbuf)+1, 0, (struct sockaddr*)&addrSer, addrlen);
//接收server端数据
recvfrom(sockCli, recvbuf, BUFFER_SIZE, 0, (struct sockaddr*)&addrSer, &addrlen);
printf("cccccccccccccccc, resv from Ser:>%s\n", recvbuf);
}
return 0;
}
2.server.c
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/socket.h>
int main()
{
//创建一个套接字,并检测是否创建成功
int sockSer = socket(AF_INET, SOCK_DGRAM, 0);
if(sockSer == -1)
perror("socket create failed!");
//serv addr
struct sockaddr_in addrSer; //创建一个记录地址信息的结构体
addrSer.sin_family = AF_INET; //使用AF_INET协议族
addrSer.sin_port = htons(60450); //设置地址结构体中的端口号
addrSer.sin_addr.s_addr = inet_addr("127.0.0.1"); //设置通信ip
/*addrSer.sin_addr.s_addr = inet_addr("192.168.70.1"); //设置通信ip*/
//client addr
struct sockaddr_in addrCli; //创建一个记录地址信息的结构体
addrCli.sin_family = AF_INET; //使用AF_INET协议族
addrCli.sin_port = htons(61450); //设置地址结构体中的端口号
addrCli.sin_addr.s_addr = inet_addr("127.0.0.1"); //设置通信ip
/*addrCli.sin_addr.s_addr = inet_addr("192.168.3.169"); //设置通信ip*/
//server port bind
//将套接字地址与所创建的套接字号联系起来,并检测是否绑定成功
socklen_t addrlen = sizeof(struct sockaddr);
int res = bind(sockSer,(struct sockaddr*)&addrSer, addrlen);
if(res == -1)
perror("bind port failed!");
char sendbuf[256]; //申请一个发送数据缓存区
char recvbuf[256]; //申请一个接收数据缓存区
while(1)
{
recvfrom(sockSer,recvbuf,256,0,(struct sockaddr*)&addrCli, &addrlen); //从指定地址接收客户端数据
printf("ssssssssssssssss, recv from client:%s\n",recvbuf);
printf("ssssssssssssssss, send to client:>");
scanf("%s",sendbuf);
sendto(sockSer,sendbuf,strlen(sendbuf)+1,0,(struct sockaddr*)&addrCli, addrlen); //向客户端发送数据
}
return 0;
}
3.Makefile
all:server client
server:server.c
gcc -o server server.c
client:client.c
gcc -o client client.c
clean:
rm -f server
rm -f client
结果:
参考:
https://blog.csdn.net/u012234115/article/details/54142273
https://blog.csdn.net/chinazhd/article/details/45134811
https://blog.csdn.net/dandelion_gong/article/details/51602209
https://www.cnblogs.com/skyfsm/p/6287787.html?utm_source=itdadao&utm_medium=referral
https://blog.csdn.net/dandelion_gong/article/details/51602209