Linux Socket 编程实验_原创文档.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

实验6.LinuxSocket编程实验

1、实验目的:

(1)了解TCP/IP协议;

(2)掌握socket编程。

2、实验设备:

(1)PC机的VMware虚拟机运行UbuntuLinux系统;

(2)两机对连的网络线;

(3)带网口的测试计算机;

(4)WINDOWS“SOCKETTOOL”调试工具。

3、实验内容:

实现典型客户机/服务器程序中的服务器及客户机。

4、实验原理

4.1客户机/服务器工作流程

使用TCP协议的客户机/服务器进程的工作过程如下图

4.2Socket编程相关函数

常用的socket函数有:socket,bind,listen,accept,connect,send,recv。

1)socket(建立连接)

表头文件:

#includesys/types.h

#includesys/socket.h

定义函数:intsocket(intfamily,inttype,intprotocol);

函数说明:socket()函数用来生成一个套接口描述字,也称为套接字,指

定协议簇和套接口。

参数:family指定协议族,type指明字节流方式,而protocol一般为0

Family的取值范围:

AF_LOCALUNIX协议族

AF_ROUTE路由套接口

AF_INETIPv4协议

AF_INET6IPv6协议

AF_KEY密钥套接口

参数type的取值范围:

SOCK_STREAMTCP套接口

SOCK_DGRAMUDP套接口

SOCK_PACKET支持数据链路访问

SOCK_RAM原始套接口

返回值:成功返回非负描述字,失败返回负值

2)bind(对socket定位)

表头文件:

#includesys/types.h

#includesys/socket.h

定义函数:

Intbind(intsockfd,structsockaddr*my_addr,intaddrlen);

函数说明bind()用来设置给参数sockfd的socket一个名称。此名称由参数

my_addr指向一

sockaddr结构,对于不同的socketdomain定义了一个通用的数据结构

structsockaddr

{

unsignedshortintsa_family;

charsa_data[14];

};

sa_family为调用socket()时的domain参数,即AF_xxxx值。

sa_data最多使用14个字符长度。

此sockaddr结构会因使用不同的socketdomain而有不同结构定义,

例如使用

AF_INET

domain,其socketaddr结构定义便为

structsocketaddr_in

{

unsignedshortintsin_family;

uint16_tsin_port;

structin_addrsin_addr;

unsignedcharsin_zero[8];

};

structin_addr

{

uint32_ts_addr;

};

sin_family即为sa_family

sin_port为使用的port编号

sin_addr.s_addr为IP地址

sin_zero未使用。

参数socket为套接字,my_addr是一个指向特定协议地址结构的指针,

addrlen为sockaddr

的结构长度。

返回值成功则返回0,失败返回-1,错误原因存于errno中。

错误代码

EBADF参数sockfd非合法socket处理代码。

EACCESS权限不足

ENOTSOCK参数sockfd为一文件描述词,非socket。

3)listen(等待连接)

表头文件:

#includesys/socket.h

定义函数:

Intlisten(ints,intbacklog);

函数说明:

listen()用来等待参数s的socket连线。

参数backlog指定同时能处理的最大

连接要求,如果连接数目达此上限则client端将收到ECONNREFUSED的错误。

Listen()并未开始接收连线,只是设置socket为listen模式,真正接收client

端连线的是accept()

您可能关注的文档

文档评论(0)

单元金卷 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档