




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关于实验tcp套接字编程一、实验目的1精通基本的TCP socket编程流程(服务器侧、客户端侧)掌握两个过程中重要函数的使用方法二、实验要求1输入、编译和执行实例程序,并导出执行结果写关于双插槽定义的句子(服务器端、客户端分别写)写可以表现TCP套接字编程流程的句子(服务器方面、客户端方面分别写)。4写上诉相关文件和头文件以外的文章评论三、实例程序服务器端客户端执行:执行服务器端程序. /服务器端程序名运行客户端程序. /客户端程序名称空间127.0.0.1服务器端1. #include2. #include3. #include4. #include5. #include6. #include7. #include8. #include /18行:所需的头文件9. #define PORT 1234 /定义端口号为1234;10. #define BACKLOG 1 /允许的最大连接数BACKLOG定义为111. main ()12. 13 .不监听、连接软盘;14 .结构sockaddr _ in服务器;15 .结构sockaddr _ in客户端;16. socklen_t addrlen;17.if (监听=套接字(af _ inet,SOCK_STREAM,0)=-1 )18 .吐19. perror(socket() error. );20 .退出(1)21. /1721行:调用套接字()函数来生成TCP套接字。 如果发生错误,打印错误信息。22 .输入输出=so _ reuse addr;23 .设置套接字(侦听、SOL_SOCKET、SO_REUSEADDR、opt、sizeof(opt ) );/2223行:设置套接字选项SO_REUSEADDR,即地址重用选项。 默认情况下,只能将一个套接字绑定到特定协议地址,因此即使套接字关闭,系统也不能将另一个套接字绑定到该地址。 如果删除这两行,则程序运行时出现的错误信息为Bind() error,即Address already in use。24.bzero (服务器,sizeof (服务器) );25. server.sin_family=AF_INET;26. server.sin_port=htons(PORT )27.server.sin _ addr.s _ addr=htonl (ina addr _ any )/2427行:初始化server套接字的地址结构,并分配给地址结构的成员。 当前本地地址设置为INADDR_ANY,目的地地址是本地IP的客户机连接,其中端口号和IP地址按网络字节顺序转换。28 .绑定id (结构套接字* )服务器,尺寸(服务器)=-1 )29. 30.perror(bind()error );31 .退出(1)将32. /2832行:套接字与指定的协议地址绑定。33 .监听(监听,BACKLOG)=-134 .吐35. perror(listen() errorn );36 .退出(1)37. /3337行:将套接字描述符转换为监听程序描述符,等待客户机连接38.addrlen=sizeof (客户端)39.if (连接FD=接受id ) (结构套接字* )客户端,地址)=-1 )40. 41. perror(accept() errorn );42 .退出(1)43. /3943行:接受客户端连接,客户端的地址信息存储在客户端的地址结构中44 .打印( yougotaconnectionfromcintsiis % s,端口% dn ,inet_ntoa(client.sin_addr ),htons(client.sin_port ) );/显示客户的IP地址和端口号使用inet_ntoa ()函数将IP地址转换为可显示的ASCII字符串,使用htons ()函数将端口号转换为网络字节顺序。45 .发送(连接软盘,“欢迎”,8,0 ); 将Welcome字符串发送到客户端46 .关闭(连接软盘)47 .关闭(侦听)/46至47行:关闭插座。 关闭所连接的插座,然后关闭接收插座48. 客户端1. #include2. #include3. #include4. #include5. #include6. #include7. #include8. #include /18行:所需的头文件9. #define PORT 1234 /定义端口号为1234;10. #define MAXDATASIZE 100 /接收缓冲区大小为10011. int main(int argc,char *argv )12. 13 .入口软件,数字;14.char buf 最大数据;15 .结构主机* he;16 .结构sockaddr _ in服务器;PR (PS!=2)18 .吐19 .打印(使用: % sn ,argv0 );20 .退出(1)21. /1721行:检查用户的输入。 如果用户输入不正确,请向用户询问正确的输入方法22.if (he=gethostbyname (argv 1 )=null )23.2222222222222222222224.printf ( gethostbyname () errorn );25 .退出(1)26. /2226行:从用户输入的点十进制形式的IP地址中获取有关服务器的地址信息27. if (sockfd=socket(AF_INET,SOCK_STREAM,0)=-1 )28.2222222222222222222229.printf(socket()errorn );30 .退出(1)31. /2731行:调用套接字()函数生成套接字描述符32.bzero (服务器,大小(服务器) );33 .服务器. sin _ family=af _ inet;34. server.sin_port=htons(PORT )35.server.sin _ addr=* (struct in _ addr * ) he-h _ addr )/3235行:初始化服务器地址结构,并将其分配给地址结构中的成员36 .连接(sockfd ) (结构软件* )服务器,尺寸(服务器)=-1 )37 .吐38. printf(connect() errorn );39 .退出(1)40. /3640行:调用connect ()函数连接到服务器41. if (num=recv(sockfd,buf,MAXDATASIZE,0)=-1 )42. 43. bufnum-1=0;44 .退出(1)45. /4145行:从服务器接收字符串,并存储在buf中。 接收的真字节数存储于num。46. bufnum-1=0; /以0标志字符串结束47 .打印(服务器消息: % sn ,buf ); /显示从服务器接收到的buf信息48 .关闭(sockfd )/插座49. 与套接字定义相关的语句服务器端:u struct sockaddr_in server; 定义server的套接字地址结构utstructsockaddr_inknet; 定义clinet的套接字地址结构u socklen_t addrlen; /定义通用套接字地址结构初始化u bzero (服务器,大小(服务器) ) /服务器u server.sin_family=AF_INET; /为地址结构中的成员地址家族指派值为u server.sin_port=htons(PORT) /地址结构中的成员端口号指派值user ver.sin _ addr.s _ addr=htonl (ina addr _ any )/当前本地地址设置为INADDR_ANY客户端:u structsockaddr_inserver; 定义server的套接字地址结构初始化u bzero (服务器,尺寸(服务器) )/服务器u server.sin_family=AF_INET; /为地址结构中的成员地址家族指派值为u server.sin_port=htons(PORT) /地址结构中的成员端口号指派值user ver.sin _ addr=* (struct in _ addr * ) he-h _ addr )/为地址结构中成员的IP地址指派值TCP套接字编程过程的语句服务器端:1 .套接字()函数if(listenindd=socket(af_inet,SOCK_STREAM,0)=-1 )举止perror(socket() error. );exit(1)调用/套接字()函数来生成TCP套接字。 如果发生错误,打印错误信息。2、bind ()函数if (绑定id ) (结构套接字* )服务器,sizeof (服务器)=-1举止perror(Bind() error );exit(1)调用/bind ()函数时,描述符listenfd绑定到server套接字地址结构中的协议地址。3、listen ()函数if (监听(监听,BACKLOG)=-1 )举止perror(listen() errorn );exit(1)调用/listen ()函数将listenfd描述符设置为监听程序描述符4、accept ()函数if (连接FD=接受id ) (结构套接字* )客户端,地址)=-1 )举止perror(accept() errorn );exit(1)调用/accept ()函数,接收连接请求,并返回所连接的套接字的说明。 连接到服务器的客户端的协议地址可以从客户端参数获取,addrlen返回内核写入客户端结构的正确字节数。客户端:1 .套接字()函数if (sockfd=socket(AF_INET,SOCK_STREAM,0)=-1 )举止printf(socket() errorn );exit(1)调用| /套接字()函数来生成套接字描述符2、connect ()函数if (连接(sockfd ) (结构软件* )服务器,sizeof (服务器)=-1 )举止printf(connect() errorn );exit(1)调用/connect ()函数建立与服务器的连接。3、recv ()函数if (num=recv(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国黑水虻养殖项目创业计划书
- 中国计算中心项目创业计划书
- 中国激光雕刻光刻控制软件项目创业计划书
- 中国蓝莓种植项目创业计划书
- 中国口腔医疗器材项目创业计划书
- 中国口腔科用设备制造项目创业计划书
- 中国酒店信息管理系统项目创业计划书
- 2025产品授权合同范本
- 2025年上海市办公家具采购合同
- 2025保洁及维护服务合同
- 赛事执行团队管理制度
- 高龄用工免责协议书
- GB 15269-2025雪茄烟
- 用电检查员技能培训课件-三相四线计量装置错接线分析及操作
- 食堂投标服务方案
- 《新能源材料概论》 课件 第2章 热电转换新能源材料
- 足月待产护理个案
- 礼让行车培训
- DBJ51T 008-2015 四川省建筑工业化混凝土预制构件制作 安装及质量验收规程
- 基于学科核心素养的初中历史大单元教学设计研究
- 建筑给排水班组劳动合同
评论
0/150
提交评论