文章目录
- 一、通信实现
- 二、Linux-Linux
- 1. 服务器 Server
- 2. 客户端 Client
- 三、Linux-Windows
- 1. 服务器 Linux_Server
- 2. 客户端 Windows_Client
- 程序源码
一、通信实现
1. Linux-Linux
在虚拟机下开启俩个终端,分别运行服务器和客户端程序(服务器运行在前,客户端运行在后)
2. Linux-Windows
①客户端 Windows_Client
②服务器 Linux_Server
二、Linux-Linux
1. 服务器 Server
①头文件声明
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
②创建套接字
int sockfd = socket(AF_INET,SOCK_DGRAM,0);
③指定IP地址与端口号
struct sockaddr_in saddr,caddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(8080);//普通数字可以用htons()函数转换成网络数据格式的数字)
saddr.sin_addr.s_addr = inet_addr("192.168.124.16");//将点分十进制的IP地址转化为二进制
④绑定
bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
UDP不用listen监听
⑤接收客户端发送过来的数据
recvfrom(sockfd,buff,127,0,(struct sockaddr*)&caddr,&len);
⑥发送消息给客户端
sendto(sockfd,"OK",2,0,(struct sockaddr*)&caddr,sizeof(caddr));
⑦关闭套接字
close(sockfd);
2. 客户端 Client
①头文件声明
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
②创建套接字
sockfd = socket(AF_INET,SOCK_DGRAM,0);
③指定IP地址和端口号
struct sockaddr_in saddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(8080);
saddr.sin_addr.s_addr = inet_addr("192.168.124.16");
④向服务器发送消息
fgets(buff,128,stdin);
sendto(sockfd,buff,strlen(buff),0,(struct sockaddr*)&saddr,sizeof(saddr));
⑤接收服务器发过来的消息
recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len);
⑥关闭套接字
close(sockfd);
三、Linux-Windows
1. 服务器 Linux_Server
①头文件声明
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
②创建套接字
int sockfd = socket(AF_INET,SOCK_DGRAM,0);
③指定IP地址与端口号
struct sockaddr_in saddr,caddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(8080);//普通数字可以用htons()函数转换成网络数据格式的数字)
saddr.sin_addr.s_addr = inet_addr("192.168.124.16");//将点分十进制的IP地址转化为二进制
④绑定
bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
UDP不用listen监听
⑤接收客户端发送过来的数据
recvfrom(sockfd,buff,127,0,(struct sockaddr*)&caddr,&len);
⑥发送消息给客户端
sendto(sockfd,"OK",2,0,(struct sockaddr*)&caddr,sizeof(caddr));
⑦关闭套接字
close(sockfd);
2. 客户端 Windows_Client
①声明头文件与库
#include <stdio.h>
#include <Windows.h>
#include <assert.h>
#pragma comment(lib, "ws2_32.lib")
②Sockets初始化信息
WSADATA s;
if (WSAStartup(MAKEWORD(2, 2), &s) != 0) // 通过连接两个给定的无符号参数,首个参数为低字节,使用2.2版本的Socket
{
printf("Init Windows Socket Failed! Error: %d\n",GetLastError());
getchar();
return -1;
}
③创建套接字
SOCKET sockfd = socket(AF_INET,SOCK_DGRAM,0);
④指定IP地址和端口号
struct sockaddr_in saddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(8080);
saddr.sin_addr.s_addr = inet_addr("192.168.124.16");
⑤向服务器发送消息
fgets(buff,128,stdin);
sendto(sockfd,buff,strlen(buff),0,(struct sockaddr*)&saddr,sizeof(saddr));
⑥接收服务器发过来的消息
recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len);
⑦关闭套接字
closesocket(sockfd);
WSACleanup( );
程序源码
若需程序源码可在评论区留言QQ邮箱 或 直接私信即可。