⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 soketdlg.cpp

📁 一各简单的WINCE平台下的聊天室内程序
💻 CPP
字号:
// soketDlg.cpp : implementation file
//

#include "stdafx.h"
#include "soket.h"
#include "soketDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

DWORD WINAPI recvdataproc(LPVOID param);

/////////////////////////////////////////////////////////////////////////////
// CSoketDlg dialog

CSoketDlg::CSoketDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSoketDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSoketDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSoketDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSoketDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CSoketDlg, CDialog)
	//{{AFX_MSG_MAP(CSoketDlg)
	ON_BN_CLICKED(IDC_BUTTON_SEND, OnButtonSend)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_RECEIVE,onreceive)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSoketDlg message handlers

BOOL CSoketDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	this->InitSocket();//初始化socket
	propty *proprecev=new propty;
	proprecev->wndhandle=this->m_hWnd;
	proprecev->sock=this->m_socket;

	HANDLE re=CreateThread(NULL,0,recvdataproc,(LPVOID)proprecev,0,NULL);	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen


	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}



bool CSoketDlg::InitSocket()
{
	m_socket=socket(AF_INET,SOCK_DGRAM,0);
	if(m_socket==INVALID_SOCKET)
	{
		MessageBox(L"套接字创建失败");
		return FALSE;
	}
	u_short i=htons(6000);//转换成TCP/IP地址
	
	SOCKADDR_IN m_sockaddr;
	m_sockaddr.sin_family=AF_INET;
	m_sockaddr.sin_port=i;
	m_sockaddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
	int n=bind(m_socket,(SOCKADDR*)&m_sockaddr,sizeof(SOCKADDR));
	if(n==SOCKET_ERROR)
	{
		closesocket(m_socket);
		MessageBox(L"绑定失败");
		return FALSE;	
	}
	else
		return TRUE;
}



void CSoketDlg::OnButtonSend() 
{

	CString myStr;
	GetDlgItemText(IDC_EDIT2,myStr);
	char* Str=new char[20];
	wcstombs(Str,myStr,20);


	u_long dword = inet_addr(Str);
	SOCKADDR_IN addrTo;
	addrTo.sin_family=AF_INET;
	addrTo.sin_port=htons(6000);
	addrTo.sin_addr.S_un.S_addr=dword;
	
	CString strSend;
	GetDlgItemText(IDC_EDIT3,strSend);
	char* strsend=new char[50];
	wcstombs(strsend,strSend,50);


	sendto(m_socket,strsend,LocalSize(strsend),0,(SOCKADDR*)&addrTo,sizeof(SOCKADDR));
	SetDlgItemText(IDC_EDIT3,_T(""));

}

DWORD WINAPI recvdataproc(LPVOID param)//线程函数
{
	HWND thwnd=((propty*)param)->wndhandle;
	SOCKET thsock=((propty*)param)->sock;
	char receve[300];
	SOCKADDR_IN fromaddress;
	
	int len=sizeof(SOCKADDR);
	int rsult;
	char display[300];
	
	while(true)
	{
			rsult=recvfrom(thsock,receve,300,0,(SOCKADDR*)&fromaddress,&len);
			if(SOCKET_ERROR==rsult) 
			{
				break;
			}
			sprintf(display,"%s说:%s",inet_ntoa(fromaddress.sin_addr),receve);
		::PostMessage(thwnd,WM_RECEIVE,0,(LPARAM)display);
	}
	
	return 0;
}



void CSoketDlg::onreceive(WPARAM wParam, LPARAM lParam)
{
	CString m1;
	CString m2;
	GetDlgItemText(IDC_EDIT1,m1);
	m2=(char *)lParam;	
	
	m2+="\r\n";
	m2+=m1;
	SetDlgItemText(IDC_EDIT1,m2);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -