网络编程课程设计Word文件下载.docx
《网络编程课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《网络编程课程设计Word文件下载.docx(10页珍藏版)》请在冰点文库上搜索。
![网络编程课程设计Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/3/a0b9b054-3014-4529-8bc3-01d368551000/a0b9b054-3014-4529-8bc3-01d3685510001.gif)
连接确认是当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的信息发送给客户端,一旦客户端确认了此连接,连接即可建立。
而服务器端继续处于监听状态,继续接收其他客户端的连接请求。
通过标准框架编写TCP服务器与客户端合成的工程软件步骤:
客户端程序包括程序文件client.asm和资源文件client.rc。
资源文件确定了客户端的界面形式。
服务器端程序包括程序文件server.asm和资源文件server.rc。
资源文件确定了服务器端的界面形式。
在以下两个头文件
ServerSocket.h:
ClientSocket.h:
中加入服务器窗体的对象指针CTransFileDlg*m_pDlg;
在ServerSocket.cpp文件中函数
voidCServerSocket:
:
OnAccept(intnErrorCode)
{
m_pDlg->
AcceptConnection();
}
为接到TCP客户端CONNECT请求后服务器自动执行的相应函数。
OnReceive(intnErrorCode)
ReceiveData();
为接到TCP客户端SEND发送的数据后,服务器自动执行的接收函数。
在ClientSocket.cpp文件中函数
voidCClientSocket:
SendFileData();
为接到TCP服务器SEND发送的数据后,客户端自动执行的接收函数。
在TransFileDlg.h(对话框的类头文件)定义:
CServerSocket*m_pServerSock;
//为负责服务器监听和响应客户端连接请求的SOCKET对象指针。
CServerSocket*m_ServerSock;
//为负责和客户端进行数据通信(RECEIVE、SEND)SOCKET对象指针。
CClientSocket*m_pSendSock;
//为负责客户端向服务器端发起连接请求,连接成功后又通过它和服务器建立通信链路(SEND,RECEIVE)进行发送和接收。
在文件TransFileDlg.cpp中BOOLCTransFileDlg:
OnInitDialog()窗体初始化函数加入
m_pServerSock=newCServerSocket(this);
//创建指针
m_ServerSock=newCServerSocket(this);
m_pSendSock=newCClientSocket(this);
m_pServerSock->
Create(SERVERPORT);
//服务器SOCKET绑定
m_pSendSock->
Create(CLIENTPORT);
//客户端SOCKET绑定
if(!
m_pServerSock->
Listen())//服务器开始监听
MessageBox("
监听失败"
);
在本事件(发送按钮)激发函数中
建立客户端向服务器的连接,并发送数据。
voidCTransFileDlg:
OnButtontrans()
if(m_Send==FALSE)
{
Close();
m_pSendSock->
if(!
m_pSendSock->
Connect(host,SERVERPORT))
{
intaa=m_pSendSock->
GetLastError();
m_SendFile.Close();
m_pSendSock->
MessageBox("
连接失败"
m_Send=FALSE;
return;
}
SetTimer(1,2000,NULL);
//发送文件信息
m_SendNum=0;
Send(fileinfo,MAX_PATH+4);
m_SendLen=0;
LocalFree(fileinfo);
}
else
当前发送任务没有完成"
本函数实现服务器相应客户端的连接,并创建和客户端通信的通路:
AcceptConnection()
m_ServerSock->
Accept(*m_ServerSock);
服务器接收到数据后的对应处理函数:
ReceiveData()
客户端接收到数据后的对应处理函数:
SendFileData()
下面是我对部分源程序的分析:
客服端程序:
ClientDlg.cpp:
#include"
stdafx.h"
Client.h"
ClientDlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
pMysocket=newCMysocket(this);
//创建套接字对象
if(!
pMysocket->
Create())//创建套接字
deletepMysocket;
MessageBox("
套接字创建失败."
returnfalse;
returnTRUE;
voidCClientDlg:
OnSysCommand(UINTnID,LPARAMlParam)
if((nID&
0xFFF0)==IDM_ABOUTBOX)
CAboutDlgdlgAbout;
dlgAbout.DoModal();
CDialog:
OnSysCommand(nID,lParam);
charbuffer[200];
//接收传来的数据
intfactdata=pMysocket->
Receive(buffer,200);
buffer[factdata]=0;
CStringstr;
str.Format("
%s"
buffer);
SetDlgItemText(IDC_EDIT4,str);
OnButtonjoin()//点击连接
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
CStringservername=m_servername;
//读取服务器名称
intport;
port=70;
//获取端口
if(!
Connect(servername,port))//连接服务器,如果没有连接到服务器名称、端口号,连接服务器失败
连接服务器失败!
"
return;
%s----->
m_name,"
进入聊天室"
//打出字昵称进入聊天室
pMysocket->
Send(str.GetBuffer(0),str.GetLength());
GetDlgItem(IDC_BUTTONJOIN)->
EnableWindow(FALSE);
OnButton2()//点击发送
CStringstr,temp,str1;
m_info.GetWindowText(str);
if(str.IsEmpty()|m_name.IsEmpty())
return;
temp.Format("
%s说:
%s"
m_name,str);
Send(str.GetBuffer(str.GetLength()),str.GetLength());
Mysocket.cpp:
voidCMysocket:
if(pClientdlg)
pClientdlg->
//调用主对话框的ReceiveData方法接收数据
CSocket:
OnReceive(nErrorCode);
服务端程序:
ServerDlg.cpp:
Server.h"
ServerDlg.h"
voidCServerDlg:
AcceptConnect()//服务器接受客户端的连接
CClientSocket*socket=newCClientSocket(this);
//创建与客户端通信的端口
if(m_pSocket->
Accept(*socket))//如果SOCKET对象指针接受这个端口,则响应客户端连接请求
deletesocket;
OnButton1()//点击监听
m_pSocket=newCServerSocket(this);
//负责服务器监听的socket对象指针=创建套接字
m_pSocket->
Create(70))//创建的端口!
=70
套接字创建失败"
deletem_pSocket;
m_pSocket=NULL;
Listen())//如果没有连接到listen函数,则监听失败
ReceiveData(CClientSocket*socket)
CStringstr_ii;
charbufferdata[200];
//创建缓存
//接收客户端传来的数据
intresult=socket->
Receive(bufferdata,200);
bufferdata[result]=0;
bufferdata);
SetDlgItemText(IDC_EDIT1,str);
//在编辑框显示接收的数据
ServerSocket.cpp:
OnAccept(intnErrorCode)//接到TCP客户端CONNECT请求后服务器自动执行接受连接函数
CSocket:
OnAccept(nErrorCode);
if(m_pDlg)//服务器窗体的对象指针
m_pDlg->
AcceptConnect();
利用两台电脑分别作为客户端和服务端分别运行程序,编译无错误后。
在Dos环境下,客户端输入telent服务端IP,请求连接,服务端响应后。
客户端就可以访问服务端。