当前位置: 首页 > news >正文

网络编程5

本章就是根据第四章的函数来编写一个完整的TCP客户/服务器程序实例
客户从标准输入读入一行文本,并写给服务器
服务器从网络读入这行文本,并回射给客户
客户从网络输入读入这行回射代码,并标出了用于输入和输出的函数

include "unp.h"

int
main(int argc, char **argv)
{
int listenfd, connfd;
pid_t childpid;
socklen_t clilen;
struct sockaddr_in cliaddr, servaddr;
listenfd = Socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
Listen(listenfd, LISTENQ);
for(;😉{
clilen = sizeof(cliaddr);
connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);
if ((childpid = Fork()) == 0){
Close(listenfd);
str_echo(connfd);
exit(0);
}
Close(connfd);
}
}//TCP回射服务器程序:main函数

void
str_echo(int sockfd)
{
ssize_t n;
char buf[MAXLINE];
again:
while((n=read(sockfd, buf, MAXLINE))>0)
Writen(sockfd, buf, n);
if (n<0 && errno == EINTR)
goto again;
else if (n<0)
err_sys("str_echo: read error");
}//TCP回射服务器程序:str_echo函数,从客户读入数据并把它们回射给客户

int main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in servaddr;
if (argc != 2)
err_quit("usage:tcpcli ");
sockfd = Socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
Connect(sockfd, (SA *) &servaddr, sizeof(servaddr));
str_cli(stdin, sockfd);
exit(0);
}//TCP回射客户程序:main函数

void
str_cli(FILE *fp, int sockfd)
{
char sendline[MAXLINE], recvline[MAXLINE];
while (Fgets(sendline, MAXLINE, fp) != NULL){
Writen(sockfd, sendline, strlen(sendline));
if (Readline(sockfd, recvline, MAXLINE) == 0)
err_quit("str_cli: server terminated prematurely");
Fputs(recvline, stdout);
}
}//TCP回射客户程序:str_cli函数完成客户处理循环,从标准输入读入一行文本,写到服务器上,读回服务器对该行的回射,并把回射行写到标准输入上。

http://www.jsqmd.com/news/427291/

相关文章:

  • 推荐下江苏专业做电磁仿真服务的公司|2026全新原创选型指南 - 冠顶工业设备
  • 开箱即用!MiniCPM-o-4.5镜像快速体验:支持文本和图像交互的AI助手
  • Bidili Generator参数详解:LoRA强度步进0.1级微调在商业图生成中的价值
  • 物联网 (IoT) 固件 Web 管理接口漏洞深度挖掘:从入门到实战
  • 看完就会:一键生成论文工具 千笔·专业论文写作工具 VS WPS AI 本科生必备
  • Z-Image-GGUF效果展示:1024高清图片生成,风景人物全搞定
  • 乙巳马年春联生成终端快速上手:支持中文输入法的实时生成体验
  • MusePublic圣光艺苑实操案例:城市规划可视化AI效果图生成实践
  • 推荐好句
  • 解锁学术新境界:书匠策AI——期刊论文创作的智慧伙伴
  • YOLOv11改进点(不需要自己改),可以直接复制yaml模型文件的绝对路径进行训练,不需要改task.py等骨干网络(backbone)改进, 2、识别头改进, 3、卷积块(Conv)改进, 4、轻
  • 2026高压变频器厂家推荐:防爆软启动柜/高压软启动/高标准农田灌溉变频控制柜/PLC控制柜/供水供暖控制柜/工业自动化/选择指南 - 优质品牌商家
  • Neeshck-Z-lmage_LYX_v2快速入门:Streamlit界面超友好,参数调节一目了然
  • Neeshck-Z-lmage_LYX_v2基础教程:Z-Image模型加载与LoRA权重管理原理
  • DeepSeek V4 本周发布,英伟达首次被“跳过”:中国 AI 换了一条路
  • Qwen3-0.6B-FP8极简教程:一键启动,体验无需联网的AI智能问答
  • 03 F2 进入 bios设置
  • Server-less 夺权:从事件注入到跨函数权限提升实战
  • Qwen2.5-Coder-1.5B详细步骤:Ollama模型选择→提问→结果解析全链路
  • 基于深度学习的水果品质检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Django+web+训练代码+数据集)
  • 从安装到出图:Stable Diffusion v1.5 Archive 完整使用流程,附中文提示词优化技巧
  • 深入虎穴:Redis与MongoDB协议层漏洞及未授权访问新模式实战剖析
  • 2026年3月昆明无人机植保机构推荐,行业权威盘点与品质红榜 - 品牌鉴赏师
  • 合肥AI搜索优化/安徽Ai搜索营销推广公司2026年推荐:通擎网络科技AI智能体激活企业增长新动能 - 速递信息
  • Gemma-3-12B-IT真实案例:将用户模糊需求转化为结构化PRD文档全过程
  • yz-bijini-cosplay实际效果:Z-Image原生架构对中文Cosplay关键词精准响应
  • 清洁度自动分析领域标杆:苏州西恩士工业科技有限公司的突围之路 - 精密仪器科技圈
  • 【节点】[FresnelEquation节点]原理解析与实际应用
  • 用视觉检测设备疲劳,看外壳微小形变,预测故障。
  • 话费卡回收流程全解析:轻松解决话费卡常见问题 - 团团收购物卡回收