下面是服務器端的程序:
#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;
}