TCP IP网络通信程序设计_基于tcpip的网络编程

2020-02-28 其他范文 下载本文

TCP IP网络通信程序设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“基于tcpip的网络编程”。

TCP/IP网络通信程序设计

本文介绍了TCP/IP网络应用程序的面向对象设计方法,并给出了用Visual C++4.2

中MFC在Windows 95环境下开发的程序实例。Sockets与Winsock 95

Winsock 95是在Unix Sockets及Windows Sockets基础上发展起来的。Sockets原

是BSD为了Unix支持互联网通信而设计的4.3BSD Unix版本中的API,它采用客户-服务器

模式的通信机制,使网络客户方和服务器方通过Sockets实现网络之间的联接和数据交

换;Win dows Sockets描述定义了一个Microsoft Windows的网络编程界面,它为

Windows TCP/IP 提供了一个BSD型套接字,除与4.3BSD Unix Sockets完全兼容外,还

包括一个扩充文件,通过一组附加的API实现Windows式(即事件驱动)的编程风格;而

Winsock 95则是在Microsoft Windows 95中进行网络应用程序设计的接口。Windows 95

在Internet支配域中的TCP /IP协议定义了Winsock 95网络编程规范,溶入了许多新特点。

MFC中提供了相应的CSock et类来实现网络通信。Sockets编程原理

Sockets同时支持数据流Sockets和数据报Sockets。

下面是利用Socket进行通信连接的过程框图。其中图1是面向连接的时序图,图2是

无连接的时序图。

图1

图2

由图可以看出,客户与服务器的关系是不对称的。对于TCP C/S,服务器首先启动,然后在某一时刻启动客户与服务器建立连接。服务器与客户开始都必须调用socket()

建立一个套接字socket,然后服务器调用bind()将套接字与一个本地网络地址捆扎在一

起,再调用listen()使套接字处于一种被动的准备接收状态,同时规定它的请求队列长

度,之后服务器就可以调用accept()来接收客户连接。客户打开套接字之后,便可通过

调用connect()和服务器建立连接。连接建立之后,客户和服务器之间就可以通过连接

发送和接收数据。最后,待数据传送结束,双方调用closesocket()关闭套接字。对于

UDP C/S,客户并不与服务器建立一个连接,而仅仅给服务器发送一张包含服务器地址的数据报。相似地,服务器也不从客户端接收一个连接,只是调用函数recvfrom,等待

从客户端来的数据。依照recvfrom返回的协议地址以及数据报,服务器就可以给客户

送一个应答。Winsock 95编程方法

用Visual C++4.2以MFC在Windows 95中实现网络编程,主要就是利用CSocket类及

其如下相关成员函数:

(1)BOOL Create(UINT nSocketPort=0,intnSocketType=SOCK_STREAM,long lEvent=FD_READ|FD_WRITE|FD_OOD|FD_ACCEPT|FD_CONNECT|FD_CLOSE|,LPCTSTR|lpszSocket Addre=NULL

该函数用来建立Socket。

(2)BOOL Bind(UINT nSocketPort,LPCTSTRlpszSocketAdde=NULL)该函数的作用是将Socket端口与网络地址连接起来。

(3)BOOL Listen(intnConnectionBacklog=5)

该函数的作用是等待Socket请求。

(4)Virtual BOOL

Accept(CAsyncSocket&rConnectedSocket,Socket,SOCKADDR*

lpSockAddr=NULL,int * lpSockAddrLen=NULL)

该函数的作用是取得队列上第一个连接请求并建立一个具有与Socket相同特性的套接字。

(5)BOOL Connect(LPCTSTR lpszHostAddre,UINTnHostPort)

该函数的作用是提出请求。其中,lpszHostAddre和nHostPort为接受请求进

程的网络地址和Socket端口号。

(6)virtual void Close()该函数的作用是关闭Socket。

使用以上类及成员函数,按照以下步骤,就可以设计出合适的通信程序: Server:Construct→Creat→Bind→Listen→Accept→Send→Close;

Client:Constuct→Creat→Connect→Receive→Close。程序实例

我们用Visual C++4.2中MFC在Windows 95环境下设计了一个daytime cliont程序,清单如下:

头文件HEAD.H内容:

#define IDM_STRAT 200

#define IDM_EDIT 200

claMainwnd:publicCFrameWnd

{public:Mainwnd();

afx_msgintOnCreat(LPCREATESTRUCT);

afx_msg void OnStart(void);

DECLARE_MESSAGE_MAP();

private:CstaticCSStatic;

CEditLineEdit;

CButtenStartButton;};

claPengApp:publicCWinApp

{public:BOOLInitInstance();}

源程序Client.CPP清单:

#include

#include

#include “head.h”

constintnPort=13;

PengApptheApp;

Main Wnd:MainWnd()

{if(!Create(NULL,“CommunicationProgram”,WS_OVERLAPPEDW INDOW,rectDefaul t))AfxAbort();}

intMainwnd:OnCreate(LPCREATESTRUCT)

{Rectrect;SetRect(& rect,80,50,160,70);

Create(“Host Name:”,WS_CHILD|WS_VISIBLE|SS_LEFT,rect,thi s);

SetRect(& rect,60,80,180,100);

LineEdit.Create(WS_CHILD|WS_VISIBLE|WS_DLGFRAME|ES_LEFT, rect,this,IDM_ED IT);

SetRect(&rect,100,120,140,140);

StartButton,Create(“start”,WS_CHILD|VS_VISIBLE|BS_PUSHBU TTON,rect,this,I DM_START);

return 0;}

BEGIN_MESSAGE_MAP(Main Wnd,CFrameWnd)

ON_WM_CREATE()

ON_BN_CLICKED(IDM_START,OnStart)

END_MESSAGE_MAP()

BOOL ControlApp:InitInstance()

{m_pMainWnd=new Main Wnd();

m_pMainWnd→ShowWindow(m_nCmdShow);

m_pMainWnd→UpdateWindow();

return;}

Void Main Wnd:Onstart(void)

{CSocketTimeClient;

if(!AfxSocketInit())MeageBox(“WindowsSocket initialfailed!”,“Receive”,MB_ICONSTOP);

if(!TimeClient.Create())MeageBox(“ReceiveSocketcrea te failed”,“Receive”,MB_I(ON)STOP);

elseTimeClient.connect(strAddr,nPort);

TimeClient.ReceiveFrom(csReceiveText,csCounts,LineEdit.G etWinText,nPort)

MeageBox(TimeClient.csReceiveText);

TimeClient.Close();}

《TCP IP网络通信程序设计.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
TCP IP网络通信程序设计
点击下载文档
相关专题 基于tcpip的网络编程 程序设计 网络通信 TCP 基于tcpip的网络编程 程序设计 网络通信 TCP
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文