Socket实验二

上传人:pu****.1 文档编号:571507422 上传时间:2024-08-11 格式:PPT 页数:8 大小:621.50KB
返回 下载 相关 举报
Socket实验二_第1页
第1页 / 共8页
Socket实验二_第2页
第2页 / 共8页
Socket实验二_第3页
第3页 / 共8页
Socket实验二_第4页
第4页 / 共8页
Socket实验二_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《Socket实验二》由会员分享,可在线阅读,更多相关《Socket实验二(8页珍藏版)》请在金锄头文库上搜索。

1、实验二 使用socket实现C/S程序上一个实验已经知道了C/S的编写框架如下:一、一、基于基于UDPUDP(面向无连接)的(面向无连接)的socketsocket编程编程服务器端(接收端)程序:1. 加载套接字库2. 创建套接字(socket)3. 将套接字绑定到一个本地地址和端口上(bind)4. 等待接收数据(recvfrom)5.关闭套接字(closesocket)客户端(发送端)程序1.加载套接字库2.创建套接字(socket)3.向服务器发送数据(sendto)4.关闭套接字(closesocket)二、基于二、基于TCPTCP(面向连接)的(面向连接)的SocketSocket编

2、程编程服务器端程序:1. 加载套接字库2.创建套接字(socket)3.将套接字绑定到一个本地地址和端口上(bind)4. 将套接字设为监听模式,准备接收客户请求(listen)5. 等待客户请求的到来;当请求带来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)6.用返回的套接字和客户端进行通信(send/recv)7. 返回,等待另一个客户请求8. 关闭套接字(closesocket)客户端程序:1. 加载套接字库2. 创建套接字(socket)3. 向服务器发送连接请求(connect)4. 和服务器端进行通信(send/receive)5.关闭套接字(closesoc

3、ket)因为UDP的程序较简单,所以这次实验的目标是实现一个服务器端和客户端交互聊天的程序,下面列出一些会用到的函数(一些上个实验中的函数就没有列出):1 1、int bind(SOCKET s,const struct sockaddr FAR int bind(SOCKET s,const struct sockaddr FAR *name,int namelen)*name,int namelen)第一个参数指定要绑定的套接字,第二个参数指定该套接字的本地地址信息,是指向sockaddr结构的指针变量,由于该地址结构是为了所有的地址家族准备使用的,这个结构可能(通常会)随使用的网络协议不

4、同而不同,所以,要用第三个参数指定该地址结构的长度。sockaddr定义如下: struct sockaddru_short sa_family;char sa_data14;第一个字段指定该地址家族,在这里必须设为AF_INET。sa_data仅仅是表示要求一块内存分配区,起到占位的作用,该区域中指定与协议相关的具体地址信息。由于实际要求的只是内存区,所以对于不同的协议家族,用不同的结构来替换sockaddr。在TCP/IP中,我们可以用SOCKADDR_INSOCKADDR_IN结构来代替sockaddr,以方便我们填写地址信息。2 2、int int listen(SOCKET s, i

5、nt backloglisten(SOCKET s, int backlog) )将套接字设置为监听模式,其中第二个参数设置等待请求连接的最大的值,即如果设置为n,则前n个请求会放置在系统的请求连接队列中,应用程序会依次对这些请求进行服务,但第n+1个连接请求则会被拒绝。3 3、SOCKET SOCKET accept(SOCKET s, const struct sockaddr FAR accept(SOCKET s, const struct sockaddr FAR * addr, int FAR* addrlen* addr, int FAR* addrlen) )从客户端接收请求,

6、并创建连接,如果连接成功,则会返回一个当前成功建立连接的套接字,该套接字不是上面创建的监听套接字,而是仅仅适用于当前的一个请求连接,如果建立连接失败,则返回值是INVALID_SOCKET,并且可以适用WSAGetLastError()函数得到相关的失败信息,具体的error code具体意义见MSDN中accept函数的最后部分的介绍4 4、int send( SOCKET s,int send( SOCKET s, const char FAR const char FAR *buf,*buf, int len, int len, int flags ) int flags )第一个参数指

7、定发送端套接字描述符;第二个参数指明一个存放应用程序要发送数据的缓冲区(想要发送的数据);第三个参数指明实际要发送的数据的字节数;第四个参数一般置0。5 5、int recv( SOCKET s,int recv( SOCKET s, char FAR char FAR *buf,*buf, int len, int len, int flags int flags ) )第一个参数指定接收端套接字描述符;第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据;第三个参数指明buf的长度;第四个参数一般置0。6 6、int PASCAL FAR connect( SOCKET s, const struct int PASCAL FAR connect( SOCKET s, const struct sockaddr FAR* name, int namelen)sockaddr FAR* name, int namelen) s:标识一个未连接套接字的描述字。name:欲进行连接的端口名。namelen:名字长度。若无错误发生,则connect()返回非0。否则的话,返回SOCKET_ERROR错误。在附件中给出了一个参考的程序代码,大家可以用来参考。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号