C语言实现SOCKET编程
以下是一个简单的C语言示例,演示了如何使用socket编程创建一个简单的服务器和客户端。在此示例中,服务器将侦听来自客户端的消息并将其原样发送回去。
//服务器端#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#definePORT8080
intmain(intargc,char*argv[]){
intserver_fd,new_socket,valread;
structsockaddr_inaddress;
intopt=1;
intaddrlen=sizeof(address);
charbuffer[1024]={0};
char*hello="Hellofromserver";
//创建套接字文件描述符
if((server_fd=socket(AF_INET,SOCK_STREAM,0))==0){
perror("socketfailed");
exit(EXIT_FAILURE);
}
//设置套接字选项,允许多个连接复用同一端口
if(setsockopt(server_fd,SOL_SOCKET,SO_REUSEADDR|SO_REUSEPORT,
&opt,sizeof(opt))){
perror("setsockopt");
exit(EXIT_FAILURE);
}
address.sin_family=AF_INET;
address.sin_addr.s_addr=INADDR_ANY;
address.sin_port=htons(PORT);
//将套接字绑定到指定IP和端口
if(bind(server_fd,(structsockaddr*)&address,
sizeof(address))<0){
perror("bindfailed");
exit(EXIT_FAILURE);
}
//开始监听连接请求
if(listen(server_fd,3)<0){
perror("listen");
exit(EXIT_FAILURE);
}
//接受并处理客户端连接
if((new_socket=accept(server_fd,(structsockaddr*)&address,
(socklen_t*)&addrlen))<0){
perror("accept");
exit(EXIT_FAILURE);
}
//从客户端读取数据
valread=read(new_socket,buffer,1024);
printf("%s\n",buffer);
//向客户端发送响应消息
send(new_socket,hello,strlen(hello),0);
printf("Hellomessagesent\n");
return0;
}
//客户端#include<stdio.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<string.h>
#definePORT8080
intmain(intargc,char*argv[]){
intsock=0,valread;
structsockaddr_inserv_addr;
char*hello="Hellofromclient";
charbuffer[1024]={0};
//创建套接字
if((sock=socket(AF_INET,SOCK_STREAM,0))<0){
printf("\nSocketcreationerror\n");
return-1;
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(PORT);
//将IPv4地址从点分十进制转换为二进制格式
if(inet_pton(AF_INET,"127.0.0.1",&serv_addr.sin_addr)<=0){
printf("\nInvalidaddress/Addressnotsupported\n");
return-1;
}
//连接到服务器
if(connect(sock,(structsockaddr*)&serv_addr,sizeof(serv_addr))<0){
printf("\nConnectionFailed\n");
return-1;
}
//向服务器发送消息
send(sock,hello,strlen(hello),0);
printf("Hellomessagesent\n");
//从服务器接收响应
valread=read(sock,buffer,1024);
printf("%s\n",buffer);
return0;
}
要编译和运行这两个文件,您可以使用以下命令:
#编译服务器端程序gccserver.c-oserver
#编译客户端程序
gccclient.c-oclient
#运行服务器端程序
./server
#在另一个终端窗口中运行客户端程序
./client
此示例将在本地主机上创建一个简单的TCP连接。客户端将向服务器发送"Hello from client"消息,然后服务器将收到该消息并发送"Hello from server"。
版权声明
本文仅代表作者观点,不代表米安网络立场。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。