C语言实现最基本的回射服务器与客户端(服务器用TCP协议回射客户发来的消息)
话不多说,直接上干货,下面两个程序都是linux程序。
server.c完整代码:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
int main(int argc, char* argv[], char* envp[])
{
char buf[1024] = {'\0'};
int listenfd, new;
struct sockaddr_in servaddr;
struct sockaddr_in peeraddr;
socklen_t peerlen = sizeof(peeraddr);
memset(&servaddr, 0, sizeof(servaddr));
if ((listenfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
{
printf("listenfd fail! \n");
return 1;
}
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(5188);
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
if ((bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr))) < 0)
{
printf("bind fail! \n");
return 2;
}
if ((listen(listenfd, SOMAXCONN)) < 0)
{
printf("listen fail! \n");
return 3;
}
if ((new = accept(listenfd, (struct sockaddr*)&peeraddr, &peerlen)) < 0)
{
printf("accept fail! new: %d\n", new);
return 4;
}
while (1)
{
memset(buf, 0, sizeof(buf));
read(new, buf, sizeof(buf));
fputs(buf, stdout);
write(new, buf, strlen(buf));
}
close(new);
close(listenfd);
return 0;
}
client.c完整代码:
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char* argv[], char* envp[])
{
char buf[1024] = {'\0'};
char bufa[1024] = {'\0'};
int sock;
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(5188);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
printf("socket fail! \n");
if (connect(sock, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0)
printf("connect fail! \n");
while (fgets(buf, sizeof(buf), stdin))
{
memset(&bufa, 0, sizeof(bufa));
write(sock, buf, sizeof(buf));
read(sock, bufa, sizeof(bufa));
fputs(bufa, stdout);
}
close(sock);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构