我是靠谱客的博主 秀丽八宝粥,最近开发中收集的这篇文章主要介绍C语言最简单的socket通讯实例—echo服务器C语言最简单的socket通讯实例—echo服务器,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
C语言最简单的socket通讯实例—echo服务器
本文致力于实现最简单的socket通讯实例。根据以下代码实例,先运行服务端,再运行客户端进行连接通讯。
原理图
socket通讯echo服务器实例:
Server端代码:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
//定义监听端口,根据需要修改
#define PORT 8888
#define MAXSIZE 1024
int main(int argc, char const *argv[])
{
//创建socket
int sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd == -1) {
printf("create socket error!n");
return -1;
}
//构造地址
struct sockaddr_in saddr;
memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(PORT);
saddr.sin_addr.s_addr = INADDR_ANY;
//使用上面构造的地址绑定socket
if (bind(sfd, (struct sockaddr *)&saddr, sizeof(struct sockaddr)) == -1) {
printf("bind socket error!, errno=%sn", strerror(errno));
return -1;
}
//监听socket
if (listen(sfd, 8) == -1) {
printf("listen error!n");
return -1;
}
//构造地址用于接受socket后写入客户端地址
struct sockaddr_in peer_saddr;
socklen_t peer_len = sizeof(struct sockaddr);
memset(&peer_saddr, 0, sizeof(peer_saddr));
//阻塞直到收到客户端发送连接请求,接受请求
int client = accept(sfd, (struct sockaddr *)&peer_saddr, &peer_len);
if (client == -1) {
printf("accept error!,errno=%sn", strerror(errno));
return -1;
}
else {
printf("accept client: %s:%dn", inet_ntoa(peer_saddr.sin_addr), peer_saddr.sin_port);
}
//与客户端通讯
for (;;) {
char buffer[MAXSIZE] = {0};
read(client, buffer, MAXSIZE);
printf("read:%sn", buffer);
write(client, buffer, strlen(buffer));
if (strcmp(buffer, "q") == 0) {
printf("close server!n");
close(client);
break;
}
}
close(sfd);
return 0;
}
Client端代码:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
//定义连接服务器IP,根据服务端IP地址修改
#define IPADDRESS "192.168.3.3"
//定义连接服务器端口,根据服务端监听端口修改
#define SERV_PORT 8888
#define MAXSIZE 1024
int main(int argc, char *argv[])
{
int sockfd;
struct sockaddr_in servaddr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);//创建socket
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
inet_pton(AF_INET, IPADDRESS, &servaddr.sin_addr);
connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));//连接socket
//与客户端进行通讯
for (;;) {
char buf[MAXSIZE] = {0};
scanf("%s", buf);
printf("sent msg:%sn", buf);
write(sockfd, buf, strlen(buf));
memset(buf, 0, sizeof(buf));
read(sockfd, buf, MAXSIZE);
printf("read msg:%sn", buf);
if (strcmp(buf, "q") == 0) {
printf("close client!n");
close(sockfd);
break;
}
}
return 0;
}
最后
以上就是秀丽八宝粥为你收集整理的C语言最简单的socket通讯实例—echo服务器C语言最简单的socket通讯实例—echo服务器的全部内容,希望文章能够帮你解决C语言最简单的socket通讯实例—echo服务器C语言最简单的socket通讯实例—echo服务器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复