TCP/IP通信(客户端)
来源:互联网 发布:软件license管理方法 编辑:程序博客网 时间:2024/05/18 01:24
建立对话框。再建立一个IP设置的对话框,并添加类GetIP,基类是CDialog。然后添加链接(确定)的消息响应virtual void OnOK();再添加WM_INITDIALOG的消息响应。然后关联变量给IP地址框CIPAddressCtrl m_ip。定义变量CString ipstr;添加初始化代码ipstr=_T("");OnOK()函数中添加 m_ip.GetWindowText(ipstr); //获取IP地址。OnInitDialog() 函数中m_ip.SetWindowText(ipstr)。在头文件中包含添加对话框的头文件#include "GetIP.h"。
StdAfx.h中添加代码
包含头文件 #include <afxsock.h> // MFC socket extensions
#define WM_CLIENT_READCOLOSE WM_USER + 101
typedef struct ZyMsg
{
char msg[100];
int i;
}Msg;
头文件中定义变量
SOCKET ServerSocket; //SOCKET
SOCKADDR_IN sockStruct; //SOCKET 结构
BOOL BindOK;
Msg msg;
GetIP类中添加
对话框中添加连接和发送函数代码
void CClientDlg::OnOK() //连接
{
// TODO: Add your control notification handler code here
LPCTSTR ip;
GetIP add;
add.ipstr= _T("218.196.255.208");
if(add.DoModal() == IDOK)
{
if(add.ipstr.IsEmpty())
{
MessageBox("没有输入IP地址!");
return;
}
else
{
ip=add.ipstr; //获取对话框中的IP
}
}
else
{
return;
}
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2,1),&wsaData)) //调用Windows Sockets DLL
{
MessageBox("Winsock无法初始化!");
WSACleanup();
return;
}
m_rxdata+="/n服务器开始创建SOCKET!";
UpdateData(FALSE); //将变量内容更新至编辑框
ServerSocket=socket(PF_INET,SOCK_STREAM,0); //创建服务器端Socket,类型为SOCK_STREAM,面向连接的通信
if(INVALID_SOCKET == ServerSocket)
{
MessageBox("无法创建服务器socket!");
return;
}
m_rxdata+="服务器端口:8001";
UpdateData(FALSE); //将变量内容更新至编辑框
DWORD dwip;
if((dwip=inet_addr(ip))==INADDR_NONE)
{
MessageBox("IP赋值错误");
return;
}
sockStruct.sin_family=AF_INET; //使用TCP/IP协议
sockStruct.sin_port = htons(8001);
sockStruct.sin_addr.S_un.S_addr = dwip;
if(SOCKET_ERROR == connect(ServerSocket,(LPSOCKADDR)&sockStruct,sizeof(sockStruct)))
{
MessageBox("无法连接服务器。");
return;
}
else
{
char *buf=new char[100];
strcpy(buf,"工作站连接成功——发送数据到服务器");
send(ServerSocket,buf,100,0);
delete buf;
}
WSAAsyncSelect(ServerSocket,m_hWnd,WM_CLIENT_READCOLOSE,FD_READ|FD_CLOSE);
// 产生相应传递给窗口的消息为WM_SERVER_ACCEPT ,这是自定义消息
m_rxdata+="连接服务器成功!";
UpdateData(FALSE); //将变量内容更新至编辑框
m_rxdata+=("IP地址:"+add.ipstr);
UpdateData(FALSE); //将变量内容更新至编辑框
BindOK=TRUE;
return;
}
void CClientDlg::OnSend() //发送
{
// TODO: Add your control notification handler code here
if(!BindOK)
{
m_rxdata+="服务器还没有连接呢@!";
UpdateData(FALSE); //将变量内容更新至编辑框
return;
}
UpdateData(TRUE); //将编辑框内容更新至变量
if(m_txdata.IsEmpty())
{
m_rxdata+="发送的字符串不能为空!";
UpdateData(FALSE); //将变量内容更新至编辑框
return;
}
strcpy(msg.msg,(LPCTSTR)m_txdata);
msg.i=0;
if(send(ServerSocket,(char *)&msg,sizeof(msg),0) == SOCKET_ERROR)// recv(ServerSocket,buf,sizeof(buf),0);
{
m_rxdata+="发送数据发生错误。";
UpdateData(FALSE); //将变量内容更新至编辑框
return;
}
else
{
m_rxdata+=m_txdata;
}
m_txdata.Empty();
UpdateData(FALSE); //将变量内容更新至编辑框
((CEdit *)GetDlgItem(IDC_EDIT2))->SetActiveWindow();
}
添加消息映射函数
BOOL CClientDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
WSACleanup();
return CDialog::DestroyWindow();
}
手动添加接收消息映射
头文件 LRESULT OnReadClose(WPARAM wParam,LPARAM lParam);
源文件 ON_MESSAGE(WM_CLIENT_READCOLOSE,OnReadClose)
/********************接收数据***************************/
LRESULT CClientDlg::OnReadClose(WPARAM wParam,LPARAM lParam)
{
char *buf = new char[100];
CString str;
switch (WSAGETSELECTEVENT(lParam))
{
case FD_READ:
if(recv(ServerSocket,(char *)&msg,sizeof(msg),0) == SOCKET_ERROR)
{
m_rxdata+="接收数据发生错误。";
return 0L;
}
str.Format("%s",msg.msg);
m_rxdata+=str; //接收数据
UpdateData(FALSE); //将变量内容更新至编辑框
break;
case FD_CLOSE:
closesocket(ServerSocket);
m_rxdata+="服务器退出。";
UpdateData(FALSE); //将变量内容更新至编辑框
BindOK = FALSE;
break;
}
return 0L;
}
- TCP/IP通信(客户端)
- TCP/IP通信 客户端、服务器 实例
- java客户端与服务端通信Tcp/Ip
- TCP/IP通信 客户端、服务器 实例
- 网络程序设计--TCP通信(客户端)
- Socket(Tcp)通信客户端
- TCP/IP通信(服务器)
- 【C++】Winsock套接字编程,简单的TCP/IP通信代码(客户端、服务端)
- 使用TCP/IP协议实现客户端和服务端全双工通信(转载)
- Java 基于 TCP/IP 实现 Socket中的多客户端通信
- TCP/IP 多线程服务端多客户端通信 readLine
- Java 基于 TCP/IP 实现 Socket中的多客户端通信
- android TCP/IP传输(客户端)
- tcp ip 通信socket
- TCP/IP通信架构
- TCP/IP通信架构
- tcp ip 通信socket
- TCP/IP 通信
- 新人报到...
- 明天去公司报道!
- TCP/IP通信(服务器)
- "Chinese_PRC_CI_AS" 和 "Chinese_PRC_CI_AI"
- 从android角度看2D加速图形引擎
- TCP/IP通信(客户端)
- 开博了···
- VC++CString_成员函数用法
- 查看是否支持虚拟化技术
- Powerdesigner 逆向工程
- 面试
- 第六章 重新组织你的函数
- C++编程思想读书笔记--C++中的C
- 第七章 在对象之间搬移特性