Linux 拨号vps windows公众号手机端

C语言实现SOCKET编程

lewis 7年前 (2018-04-12) 阅读数 10 #程序编程
文章标签 c语言

以下是一个简单的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"。

版权声明

本文仅代表作者观点,不代表米安网络立场。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门