已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向连接的Socket实例 代码实例中的服务器通过socket连接向客户端发送字符串Hello, you are connected!。只要在服务器上运行该服务器软件,在客户端运行客户软件,客户端就会收到该字符串。 该服务器软件代码如下: #include #include #include #include #include #include #include #include #define SERVPORT 3333 /*服务器监听端口号 */ #define BACKLOG 10 /* 最大同时连接请求数 */ main() int sockfd,client_fd; /*sock_fd:监听socket;client_fd:数据传输socket */ struct sockaddr_in my_addr; /* 本机地址信息 */ struct sockaddr_in remote_addr; /* 客户端地址信息 */ if (sockfd = socket(AF_INET, SOCK_STREAM, 0) = -1) perror(socket创建出错!); exit(1); my_addr.sin_family=AF_INET; my_addr.sin_port=htons(SERVPORT); my_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(my_addr.sin_zero),8); if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr) = -1) perror(bind出错!); exit(1); if (listen(sockfd, BACKLOG) = -1) perror(listen出错!); exit(1); while(1) sin_size = sizeof(struct sockaddr_in); if (client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size) = -1) perror(accept出错); continue; printf(received a connection from %sn, inet_ntoa(remote_addr.sin_addr); if (!fork() /* 子进程代码段 */ if (send(client_fd, Hello, you are connected!n, 26, 0) = -1) perror(send出错!); close(client_fd); exit(0); close(client_fd); 服务器的工作流程是这样的:首先调用socket函数创建一个Socket,然后调用bind函数将其与本机地址以及一个本地端口号绑定,然后调用listen在相应的socket上监听,当accpet接收到一个连接服务请求时,将生成一个新的socket。服务器显示该客户机的IP地址,并通过新的socket向客户端发送字符串Hello,you are connected!。最后关闭该socket。代码实例中的fork()函数生成一个子进程来处理数据传输部分,fork()语句对于子进程返回的值为0。所以包含fork函数的if语句是子进程代码部分,它与if语句后面的父进程代码部分是并发执行的。 客户端程序代码如下: #include #include #include #include #include #include #include #include #define SERVPORT 3333 #define MAXDATASIZE 100 /*每次最大数据传输量 */ main(int argc, char *argv) int sockfd, recvbytes; char bufMAXDATASIZE; struct hostent *host; struct sockaddr_in serv_addr; if (argc h_addr); bzero(&(serv_addr.sin_zero),8); if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr) = -1) perror(connect出错!); exit(1); if (recvbytes=recv(sockfd, buf, MAXDATASIZE, 0) =-1) perror(recv出错!); exit(1); bufrecvbytes = 0; printf(Received: %s,buf); close(sockfd); 客户端程序首先通过服务器域名获得服务器的IP地址,然后创建一个socket,调用connect函数与服务器建立连接,连接成功之后接收从服务器发送过来的数据,最后关闭socket。函数gethostbyname()是完成域名转换的。由于IP地址难以记忆和读写,所以为了方便,人们常常用域名来表示主机,这就需要进行域名和IP地址的转换。函数原型为:struct hostent *gethostbyname(const char *name); 函数返回为hosten的结构类型,它的定义如下: struct hostent char *h_name; /* 主机的官方域名 */ char *h_aliases; /* 一个以NULL结尾的主机别名数组 */ int h_addrtype; /* 返回的地址类型,在Internet环境下为AF-INET */
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年绿色旅游产业发展策略研究项目可行性研究报告及总结分析
- 2025年互动视频广告平台项目可行性研究报告及总结分析
- 低压电工证考试宝典(完整版)
- 2025年生物医药设备研发项目可行性研究报告及总结分析
- 2025年绿化施工监理服务合同协议
- 2023年安全员职业资格考试A证模拟考(含答案)
- 2025年零食品牌推广合作
- 会同县招聘7名事业单位工作人员笔试模拟试题及参考答案详解一套
- 2025年智能物流仓储系统改造项目可行性研究报告及总结分析
- 2025年老年人智能健康监测平台项目可行性研究报告及总结分析
- 工伤知识与工伤预防培训
- JT-T-1180.1-2018交通运输企业安全生产标准化建设基本规范第1部分:总体要求
- 医院采购管理SOP
- 383221452023年中考化学课件:华山论剑-金属复习课
- 机械与自动化技术培训方案
- 轨道车司机考试-车辆检查驾驶与维护保养课件
- 急诊科运用PDCA循环缩短缺血性脑卒中患者在急诊科停留时间品管圈成果汇报
- 2021年北京市海淀区初三中考二模语文试题(有答案)
- 螺纹等级公差计算公式
- GB/T 26081-2022排水工程用球墨铸铁管、管件和附件
- 12YJ4-1 常用门窗标准图集
评论
0/150
提交评论