socket编程概述.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:74 大小:434KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

socket编程概述.ppt

socket编程概述.ppt

预览

免费试读已结束,剩余 64 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

要实现网络编程,有多种方法:通过WinSock、所用命名管道和邮箱、使用RPC(RemoteProcedureCall)等均可以实现在网络上的通信。本讲将介绍利用WinSock编程的两种途径:一种是通过WinSockAPI另一种是通过MFC提供的WinSock类,即CAsyncSocket和CSocketWindowsSocket编程原理Socket概述什么是socket?Socket在协议栈中的位置Socket到Socket的通信WindowsSocket(1)WindowsSocket(2)端口TCP/IP约定:0—1023为保留端口号,标准应用服务使用;1024以上是自由端口号,用户应用服务使用IP地址、端口和SocketTCP/IP应用服务工作原理Socket工作原理Socket的系统调用库函数API的使用方法图示分身有术#include<winsock.h>structsockaddr_in{shortsin_family;//AF_INETunsignedshortsin_port;//16位端口号,网络字节顺序structin_addrsin_addr;//32位IP地址,网络字节顺序charsin_zero[8];//保留};字节顺序解决方法:网络字节顺序字节顺序转换函数Socket的两种基本类型TCP每个Winsock应用都必须加载WinsockDLL的相应版本Web使用TCP,webserver需要创建一个SOCK_STREAM套接字把socket绑定到一个特定端口SocketI/O:listen()SocketI/O:accept()SocketI/O:accept()SocketI/O:recv()TCP#include<winsock.h>unsignedlongPASCALFARinet_addr(conststructFAR*cp);cp:一个以Internet标准“.”间隔的字符串。返回值:若无错误发生,返回一个无符号长整型数。如果传入的字符串不是一个合法的Internet地址,那么返回INADDR_NONE。structsockaddr_insrv;srv.sin_addr.s_addr=inet_addr(“128.192.35.50”);把域名转换成地址SocketI/O:connect()SocketI/O:send()SocketI/O:closesocket()TCPClient-Server交互流程tcp_server.ctcp_client.cUDPSocketI/O:socket()把socket绑定到一个特定端口SocketI/O:recvfrom()SocketI/O:recvfrom()UDPSocketI/O:sendto()UDPClient-Server交互流程udp_server.cudp_client.cWinsock2.0CAsyncSocket编程CAsyncSocketCAsyncSocket程序流程用AppWizard创建应用程序框架(1)CAsyncSocketAppWizard产生的Winsock启动代码派生CAsyncSocket类(2)CAsyncSocket:生成的CAppSocket类(AppSocket.h)添加处理Winsock事件的代码(3)classCAppSocket:publicCAsyncSocket{...//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(CAppSocket)public:virtualvoidOnReceive(intnErrorCode);//}}AFX_VIRTUAL...};激活Winsock事件(4)CAsyncSocket的成员函数CAsyncSocket构造一个CAsyncSocket对象Create创建一个socket.Attach把一个sockethandle关联到一个CAsyncSocket对象Detach取消sockethandle与一个CAsyncSocket对象之间的关联FromHandle给定一个sockethandle,返回一个指向CAsyncSocket对象的指针GetLastError得到最后一个错误操作的错误状态GetPeerName得到建立连接的socket的地址GetSockName得到一个socket的名字GetSockOpt得到一个socket的选项SetSockOpt设置一个socket的选项CSocket编程封装了使用socket时的所有细节,包括网络字节顺序,主机名