Linux下的Socket网络编程:一个简易聊天室的实现-徐慧军_第1页
Linux下的Socket网络编程:一个简易聊天室的实现-徐慧军_第2页
Linux下的Socket网络编程:一个简易聊天室的实现-徐慧军_第3页
Linux下的Socket网络编程:一个简易聊天室的实现-徐慧军_第4页
Linux下的Socket网络编程:一个简易聊天室的实现-徐慧军_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linux 下的 Socket 网络编程:一个简易聊天室的实现 - 徐慧军高级程序设计与应用实践报告一个简易聊天室的实现姓名:徐慧军学号: 2121134专业:电子与通信工程学院:信息科学与技术学院任课教师:廖晓飞2013 年 05 月 02 日Linux 下的 Socket 网络编程:一个简易聊天室的实现一 、socket 介绍socket 接口是 TCP/IP 网络的 API,socket 接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP 网络上的应用程序。要学网络编程,必须理解socket 接口。Internet上的TCP/IPsocket 接口设计者最先是将接口放在 Uni

2、x 操作系统里面的。如果了解 Unix 系统的输入和输出的话,就很容易了解 socket 了。网络的 socket 数据传输是一种特殊的 I/O , socket 也是一种文件描述符。 socket 也具有一个类似于打开文件的函数调用 socket() ,该函数返回一个整型的 socket 描述符,随后的连接建立、数据传输等操作都是通过该 socket 实现的。常用的 socket 类型有两种:流式 socket (SOCK_STREAM)和数据报式 socket (SOCK_DGRAM)。流式是一种面向连接的 socket ,针对于面向连接的 TCP服务应用; 数据报式 socket 是一种

3、无连接的 socket ,对应于无连接的 UDP服务应用。二、 Socket 创建socket 函数原型为:#include #include int socket(int domain, int type, int protocol);功能:调用成功,返回socket 文件描述符;失败,返回1,并设置 errno参数说明:domain 指明所使用的协议族, 通常为 PF_INET,表示互联网协议族 ( TCP/IP 协议 族;type 参数指定 socket 的类型:SOCK_STREAM提供有序、可靠、双向及基于连接的字节流SOCK_DGRAM支持数据报SOCK_SEQPACKET提供有序

4、、可靠、双向及基于连接的数据报通信SOCK_RAW提供对原始网络协议的访问SOCK_RDM提供可靠的数据报层,但是不保证有序性protocol通常赋值 0.socket 描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用 socket 函数时,socket 执行体将建立一个 socket ,实际上 建立一个 socket意味着为一个 socket 数据结构分配存储空间。 socket 执行体为你管理描述符表。两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。 socket 数据结构中包含这五种信息。三、 Socket 邦定b

5、ind 函数原型为:#include #include int bind(int sock_fd,struct sockaddr *my_addr, int addrlen);功能说明:将套接字和指定的端口相连。成功返回0,否则,返回 1,并置 errno.参数说明: sock_fd 是调用 socket 函数返回的 socket 描述符 ,my_addr 是一个指向包含有本机 IP 地址及端口号等信息的 sockaddr 类型的指针;addrlen 常被设置为 sizeof(struct sockaddr)。struct sockaddr结构类型是用来保存socket 信息的:struct

6、sockaddr unsigned short sa_family; /*地址族, AF_xxx */char sa_data14; /* 14字节的协议地址*/;sa_family 一般为 AF_INET,代表 Internet ( TCP/IP)地址族; sa_data 则包含该 socket 的 IP 地址和端口号。另外还有一种结构类型:struct sockaddr_in short int sin_family; /*地址族*/unsigned short int sin_port; /*端口号*/struct in_addr sin_addr; /* IP地址*/大小unsigne

7、d char sin_zero8; /*/;填充0以保持与struct sockaddr同样这个结构更方便使用。 sin_zero用来将 sockaddr_in结构填充到与structsockaddr 同样的长度,可以用bzero() 或 memset() 函数将其置为零。指向sockaddr_in的指针和指向 sockaddr 的指针可以相互转换,这意味着如果一个函数所需参数类型是 sockaddr sockaddr_in 的指针转换为指向时,你可以在函数调用的时候将一个指向sockaddr 的指针;或者相反。使用 bind 函数时,可以用下面的赋值实现自动获得本机取一个没有被占用的端口号:IP地址和随机获my_addr.sin_port = 0; /*系统随机选择一个未被使用的端口号*/my_addr.sin_addr.s_addr = INADDR_ANY; /*填入本机IP地址*/通过将 my_addr.sin_port置为 0,函数会自动为你选择一个未占用的端口来使用。同样,通过将my_addr.sin_addr.s_addr置为 INADDR_ANY,系统会自动填入本机 IP 地址。注意在使用bind函数是需要将sin_port和 sin_addr转换成为网络字节优先顺序。计算机数据存储有两

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论