socket 消息互发送 程序
来源:互联网 发布:丽水市网络图书馆 编辑:程序博客网 时间:2024/05/14 03:17
Server:
#include "stdafx.h"
#include "施政server.h"
#include "施政serverDlg.h"
#include "winsock.h"
#pragma comment(lib,"wsock32")
#define WM_CLIENT_ACCEPT WM_USER+101//自定义的消息触发异步通信事件
#define WM_CLIENT_SENDDATA WM_USER+102//自定义的消息触发异步通信事件
SOCKET szsocket,s;
sockaddr_in szsockaddr;
ON_MESSAGE(WM_CLIENT_ACCEPT,Accept)//消息对应的函数
ON_MESSAGE(WM_CLIENT_SENDDATA,senddata)//消息对应的函数
OnButton1()// 对应 初始按钮.
OnButton2()// 对应 发送按钮
senddata(WPARAM wParam, LPARAM lParam) //对应消息MAP: ON_MESSAGE(WM_CLIENT_SENDDATA,senddata)
Accept(WPARAM wParam,LPARAM lParam) //对应消息MAP: ON_MESSAGE(WM_CLIENT_ACCEPT,Accept)
主代码如下,资源文件略
void CServerDlg::OnButton1() //初始化程序并给出状态
{
WSADATA szDATA;
WORD version=MAKEWORD(2,0);
WSAStartup(version,&szDATA);
int nStatus;
szsocket=socket(AF_INET,SOCK_STREAM,0);
nStatus=WSAAsyncSelect(szsocket,m_hWnd,WM_CLIENT_ACCEPT,FD_ACCEPT);
if(nStatus==SOCKET_ERROR)
{
SetDlgItemText(IDC_EDIT1,"非阻塞模式设置失败!/r/n");
AutoLastLine(IDC_EDIT1);
}
else
{
SetDlgItemText(IDC_EDIT1,"非阻塞模式设置成功!/r/n");
AutoLastLine(IDC_EDIT1);
}
szsockaddr.sin_family=AF_INET;
szsockaddr.sin_addr.S_un.S_addr=INADDR_ANY;
szsockaddr.sin_port=htons(3000);
int backdata=0;
backdata=bind(szsocket,(LPSOCKADDR)&szsockaddr,sizeof(szsockaddr));
if(backdata==SOCKET_ERROR)
{
CString str;
GetDlgItemText(IDC_EDIT1,str);
SetDlgItemText(IDC_EDIT1,str+"绑定协议出现错误!!/r/n");
AutoLastLine(IDC_EDIT1);
}
else
{
CString str;
GetDlgItemText(IDC_EDIT1,str);
SetDlgItemText(IDC_EDIT1,str+"绑定协议成功!!/r/n");
AutoLastLine(IDC_EDIT1);
}
backdata=listen(szsocket,1);
if(backdata==SOCKET_ERROR)
{
CString str;
GetDlgItemText(IDC_EDIT1,str);
SetDlgItemText(IDC_EDIT1,str+"监听端口失败!/r/n");
AutoLastLine(IDC_EDIT1);
}
else
{
char hostname[256];
CString str;
GetDlgItemText(IDC_EDIT1,str);
gethostname(hostname,sizeof(hostname));
hostent* hn;
hn=gethostbyname(hostname);//根据本机主机名得到本机ip
CString strIPAddr;
strIPAddr=inet_ntoa(*(struct in_addr*)hn->h_addr_list[0]);
SetDlgItemText(IDC_EDIT1,str+"监听端口成功!/r/n本机IP地址:"+strIPAddr+"/r/n");
AutoLastLine(IDC_EDIT1);
}
}
LRESULT CServerDlg::Accept(WPARAM wParam,LPARAM lParam)
{
if(WSAGETSELECTEVENT(lParam) == FD_ACCEPT)
{
s=accept(szsocket,NULL,NULL);
CString str;
GetDlgItemText(IDC_EDIT1,str);
SetDlgItemText(IDC_EDIT1,str+"IP连接成功!/r/n");
AutoLastLine(IDC_EDIT1);
}
if(WSAAsyncSelect(s,m_hWnd,WM_CLIENT_SENDDATA,FD_READ)==SOCKET_ERROR)
{
CString str;
GetDlgItemText(IDC_EDIT1,str);
SetDlgItemText(IDC_EDIT1,str+"数据传送消息失败!/r/n");
AutoLastLine(IDC_EDIT1);
return 0;
}
else
{
CString str;
GetDlgItemText(IDC_EDIT1,str);
SetDlgItemText(IDC_EDIT1,str+"准备接收数据传送!/r/n");
AutoLastLine(IDC_EDIT1);
}
return 0;
}
LRESULT CServerDlg::senddata(WPARAM wParam, LPARAM lParam)//显示接到的数据
{
if(WSAGETSELECTEVENT(lParam) == FD_READ)
{
char buff[1024];
recv(s,buff,sizeof(buff),0);
CString str1,str2;
str2=&buff[0];
GetDlgItemText(IDC_EDIT2,str1);
SetDlgItemText(IDC_EDIT2,str1+"client:"+str2+"/r/n");
}
AutoLastLine(IDC_EDIT2);
return 0;
}
void CServerDlg::OnButton2()//发送数据
{
char buff[1024];
CString str1,str2;
GetDlgItemText(IDC_EDIT3,str1);
GetDlgItemText(IDC_EDIT2,str2);
SetDlgItemText(IDC_EDIT2,str2+"server:"+str1+"/r/n");
AutoLastLine(IDC_EDIT2);
strcpy(buff,str1);
send(s,buff,sizeof(buff),0);
str1.Empty();
SetDlgItemText(IDC_EDIT3,str1);
}
void CServerDlg::AutoLastLine(int nID)
{
CEdit *pEdit=(CEdit *)GetDlgItem(nID);
int nLen=pEdit->GetWindowTextLength();
pEdit->SetFocus();
pEdit->SetSel(nLen,nLen);
}
Client:
#include "stdafx.h"
#include "施政client.h"
#include "施政clientDlg.h"
#include "winsock.h"
#pragma comment(lib,"wsock32")
SOCKET datasocket;
sockaddr_in datasockaddr;
#define WM_SENDDATA WM_USER + 101//自定义的消息用于触发异步通信事件
ON_MESSAGE(WM_SENDDATA,senddata)//消息和消息触发的函数
OnButton1()//对应按钮发送
OnButton2()//对应按钮连接
senddata(WPARAM wParam, LPARAM lParam) //对应消息ON_MESSAGE(WM_SENDDATA,senddata)
void CClientDlg::OnButton1()
{
char buff[1024];
CString str1,str2;
GetDlgItemText(IDC_EDIT2,str1);
GetDlgItemText(IDC_EDIT1,str2);
SetDlgItemText(IDC_EDIT1,str2+"client:"+str1+"/r/n");
AutoLastLine(IDC_EDIT1);
strcpy(buff,str1);
send(datasocket,buff,sizeof(buff),0);
str1.Empty();
SetDlgItemText(IDC_EDIT2,str1);
}
LRESULT CClientDlg::senddata(WPARAM wParam, LPARAM lParam)//接受并显示数据
{
if(WSAGETSELECTEVENT(lParam) == FD_READ)
{
char buff[1024];
recv(datasocket,buff,sizeof(buff),0);
CString str1,str2;
str2=&buff[0];
GetDlgItemText(IDC_EDIT1,str1);
SetDlgItemText(IDC_EDIT1,str1+"server:"+str2+"/r/n");
AutoLastLine(IDC_EDIT1);
}
return 0;
}
void CClientDlg::OnButton2() //初始化SOCKET 和服务器ip地址
{
WSADATA szDATA;
WORD version=MAKEWORD(2,0);
WSAStartup(version,&szDATA);
datasocket=socket(AF_INET,SOCK_STREAM,0);
datasockaddr.sin_family=AF_INET;
CString ipaddr1,ipaddr2,ipaddr3,ipaddr4;
GetDlgItemText(IDC_EDIT3,ipaddr1);
GetDlgItemText(IDC_EDIT4,ipaddr2);
GetDlgItemText(IDC_EDIT5,ipaddr3);
GetDlgItemText(IDC_EDIT6,ipaddr4);
datasockaddr.sin_addr.S_un.S_addr=inet_addr(ipaddr1+"."+ipaddr2+"."+ipaddr3+"."+ipaddr4);
datasockaddr.sin_port=htons(3000);
int backdata=0;
backdata=connect(datasocket,(LPSOCKADDR)&datasockaddr,sizeof(datasockaddr));
if(backdata==SOCKET_ERROR)
{
CString str;
GetDlgItemText(IDC_EDIT1,str);
SetDlgItemText(IDC_EDIT1,str+"链接失败!/r/n");
}
else
{
CString str;
GetDlgItemText(IDC_EDIT1,str);
SetDlgItemText(IDC_EDIT1,str+"IP连接成功!/r/n");
}
WSAAsyncSelect(datasocket,m_hWnd,WM_SENDDATA,FD_READ);//异步通信并注册消息事件
}
void CClientDlg::AutoLastLine(int nID)//滚动条始终处于最后一行
{
CEdit *pEdit=(CEdit *)GetDlgItem(nID);
int nLen=pEdit->GetWindowTextLength();
pEdit->SetFocus();
pEdit->SetSel(nLen,nLen);
}
- socket 消息互发送 程序
- socket 发送消息
- Socket发送消息
- C++ socket实例 发送消息
- Java UDP Socket消息发送
- perl socket 客户端发送消息
- socket 实现点对点发送消息
- 向其他程序发送消息
- 微信小程序发送模板消息
- Socket向服务端发送消息工具类
- 使用MFC Socket 发送结构体消息
- webservice向指定socket端口发送消息
- Socket向服务端发送消息工具类
- Socket发送普通消息到接口
- socket方式发送Http GET消息
- [IOS]socket发送消息长度计算
- c# 实现socket 聊天程序 互发消息
- c# 实现socket 聊天程序 互发消息
- MD5 加密工具类
- 优化MySQL数据库性能的八种方法
- Delphi与Oracle中BLOB字段的操作
- 【软件工程师日语】04.邮件(1)
- 今天好郁闷,新安装的硬件,发现不能用!
- socket 消息互发送 程序
- 杭州培训,一点感想
- 截包
- linux用户管理命令(添加,删除,修改)
- 对象内存的分配及回收
- 开饭了
- Eclipse + EclipseMe 下载与安装
- C++ 笔试
- 无奈呀