该程序在linux系统中实现了服务器和客户端之间相互传送消息,其中服务器和客户端分别通过一个linux系统中的两个终端进行模拟。本人使用的linux系统为CentOS 7。
下面是服务器端的程序:
#include <sys/types.h>
#include <sys/socket.h> // 包含套接字函数库
#include <stdio.h>
#include <netinet/in.h> // 包含AF_INET相关结构
#include <arpa/inet.h> // 包含AF_INET相关操作的函数
#include <unistd.h>
#define PORT 3339 //定义端口
int main()
{
char sendbuf[256]="OK"; //定义要发送的消息
char buf[256]; //定义接收消息的区域
int s_fd, c_fd; // 服务器和客户套接字标识符
int s_len, c_len; // 服务器和客户端消息长度
struct sockaddr_in s_addr; // 服务器IPv4套接字地址
struct sockaddr_in c_addr; // 客户端IPv4套接字地址
s_fd = socket(AF_INET, SOCK_STREAM, 0); // 创建套接字
s_addr.sin_family = AF_INET; // 定义服务器套接字地址中的域
s_addr.sin_addr.s_addr=htonl(INADDR_ANY); // 定义套接字地址为本机IP
s_addr.sin_port = PORT; // 定义服务器套接字端口
s_len = sizeof(s_addr); // 获取结构体s_addr的长度
bind(s_fd, (struct sockaddr *) &s_addr, s_len);// 綁定套接字与设置的端口号
listen(s_fd, 10); // 监听状态,守候进程,最大请求数为10
printf("请稍候,等待客户端发送数据\n");
c_len = sizeof(c_addr); //获取客户端结构体c_addr长度
c_fd = accept(s_fd,(struct sockaddr *) &c_addr,(socklen_t *__restrict) &c_len); //接收客户端连接请求
while (1)
{
if(recv(c_fd,buf,256,0)>0) //接收消息recv(c_fd,buf,256,0)>0
{
printf("收到客户端消息:\n %s\n",buf);//输出到终端
send(c_fd,sendbuf,sizeof(sendbuf),0);//回复消息
}
}
close(c_fd); <span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;"> // 关闭连接</span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">}</span>
</pre><span style="font-size: 18px;">该下面是客户端的程序:</span><pre name="code" class="cpp">#include <sys/types.h>
#include <sys/socket.h> // 包含套接字函数库
#include <stdio.h>
#include <netinet/in.h> // 包含AF_INET相关结构
#include <arpa/inet.h> // 包含AF_INET相关操作的函数
#include <unistd.h>
#define PORT 3339 //定义端口
int main()
{
int sockfd; // 客户套接字标识符
int len; // 客户消息长度
struct sockaddr_in addr; // 远端主机套接字地址
int newsockfd;
char buf[256]="come on!"; // 定义要发送的消息
int len2;
char rebuf[256]; // 定义接收消息的区域
sockfd = socket(AF_INET,SOCK_STREAM, 0); // 创建套接字
addr.sin_family = AF_INET; // 远端主机地址中的域
addr.sin_addr.s_addr=htonl(INADDR_ANY); // 远端主机IP地址
addr.sin_port = PORT; // 远端主机端口
len = sizeof(addr);
newsockfd = connect(sockfd, (struct sockaddr *) &addr, len);
//发送连接服务器的请求
if (newsockfd == -1)
{
perror("连接失败");
return 1;
}
len2=sizeof(buf); //获取发送数据的长度
while(1)
{
printf("请输入要发送的数据:\n");
scanf("%s",buf);
send(sockfd,buf,len2,0); //发送消息
if(recv(sockfd,rebuf,256,0)>0) //接收新消息
{
printf("收到服务器消息:\n %s \n",rebuf); //输出到终端
}
}
close(sockfd); // 关闭连接
return 0;
}