|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <Winsock2.h>
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include "resource.h"
#include <tchar.h>
#pragma comment(lib,"ws2_32.lib")
#define DEFAULT_PORT 5150 //服务端默认端口
SOCKET 套接字;
SOCKET NEWSOCKET;
int CALLBACK proca(HWND hdlg, UINT umsg ,WPARAM wparam,LPARAM lparam)
{
BOOL BRet=TRUE;
TCHAR 原文本[10000];
LPWSTR 连接文本;
WSADATA wsadata;
SOCKADDR_IN 服务器地址;
int 客户长度;
SOCKADDR_IN 客户端地址;
int 是否成功;
// SOCKET 套接字;
char 文本[100];
DWORD 数字=100;
char 数据大小[1024];
//用来储存调用AfxSocketInit全局函数返回的Windows Sockets初始化信息
switch(umsg)
{
case WM_CLOSE:
EndDialog(hdlg,0);
break;
case WM_COMMAND://这个消息处理是 相应按钮的各种事件
switch(LOWORD(wparam))
{
case initialize:
//初始化套接字
/*SetDlgItemText(hdlg,IDC_EDIT1,TEXT("我是帅哥123\r\n"));
GetDlgItemText(hdlg,IDC_EDIT1,sa,100);
lstrcat(sa,sb);
SetDlgItemText(hdlg,IDC_EDIT1,sa);*/
if (WSAStartup(MAKEWORD(2,2),&wsadata)!=0)
//初始化套接字
SetDlgItemText(hdlg,IDC_EDIT1,TEXT("初始化套接字失败请重新尝试\r\n"));
else
SetDlgItemText(hdlg,IDC_EDIT1,TEXT("初始化套接字成功\r\n"));
break;
case setup:
套接字=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (套接字==INVALID_SOCKET)
{
GetDlgItemText(hdlg,IDC_EDIT1,原文本,sizeof(原文本));
连接文本=L"创建套接字失败\r\n";
lstrcat(原文本,连接文本);
SetDlgItemText(hdlg,IDC_EDIT1,原文本);
WSACleanup();
return -1;
}
else
{
GetDlgItemText(hdlg,IDC_EDIT1,原文本,sizeof(原文本));
连接文本=L"创建套接字成功\r\n";
lstrcat(原文本,连接文本);
SetDlgItemText(hdlg,IDC_EDIT1,原文本);
break;
}
//创建套接字
case dkport:
服务器地址.sin_family=AF_INET;
//设置协议
服务器地址.sin_port=htons(DEFAULT_PORT);
//设置端口,并且是设置为网络字节顺序
服务器地址.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
//设置本机地址,并且设定为无限制网络连接 任何人都可以与本程序联机
if (bind(套接字,(SOCKADDR*)&服务器地址,sizeof(服务器地址))==SOCKET_ERROR)
{
数字=GetLastError();
itoa(数字, 文本, 10);
MessageBoxA(hdlg,文本,"s",MB_OK);
GetDlgItemText(hdlg,IDC_EDIT1,原文本,sizeof(原文本));
连接文本=L"绑定端口失败\r\n";
lstrcat(原文本,连接文本);
SetDlgItemText(hdlg,IDC_EDIT1,原文本);
closesocket(套接字);
WSACleanup();
return -1;
//关闭套接字
}
else{
GetDlgItemText(hdlg,IDC_EDIT1,原文本,sizeof(原文本));
连接文本=L"绑定端口成功\r\n";
lstrcat(原文本,连接文本);
SetDlgItemText(hdlg,IDC_EDIT1,原文本);
break;
}
case IDC_listen:
if (listen(套接字,10)==SOCKET_ERROR)
{
数字=GetLastError();
itoa(数字, 文本, 10);
MessageBoxA(hdlg,文本,"s",MB_OK);
GetDlgItemText(hdlg,IDC_EDIT1,原文本,sizeof(原文本));
连接文本=L"启动监听失败\r\n";
lstrcat(原文本,连接文本);
SetDlgItemText(hdlg,IDC_EDIT1,原文本);
closesocket(套接字);
WSACleanup();
return -1;
//关闭套接字
}
else{
GetDlgItemText(hdlg,IDC_EDIT1,原文本,sizeof(原文本));
连接文本=L"启动监听...\r\n";
lstrcat(原文本,连接文本);
SetDlgItemText(hdlg,IDC_EDIT1,原文本);
SetWindowText(hdlg,TEXT("启动监听/"));
break;
}
case IDC_ljclient:
客户长度=sizeof(SOCKADDR);
if ( NEWSOCKET=accept(套接字,(SOCKADDR*)&客户端地址,&客户长度)==INVALID_SOCKET)
{
GetDlgItemText(hdlg,IDC_EDIT1,原文本,sizeof(原文本));
连接文本=L"新客户连接失败\r\n";
lstrcat(原文本,连接文本);
SetDlgItemText(hdlg,IDC_EDIT1,原文本);
closesocket(套接字);
WSACleanup();
return -1;
//关闭套接字
}
else{
GetDlgItemText(hdlg,IDC_EDIT1,原文本,sizeof(原文本));
连接文本=L"成功连接新的客户\r\n";
lstrcat(原文本,连接文本);
SetDlgItemText(hdlg,IDC_EDIT1,原文本);
break;
}
case IDC_khxx:
if (BRet=recv(NEWSOCKET,数据大小,sizeof(数据大小),0)==SOCKET_ERROR)
{
数字=GetLastError();
itoa(数字, 文本, 10);
MessageBoxA(hdlg,文本,"s",MB_OK);
GetDlgItemText(hdlg,IDC_EDIT1,原文本,sizeof(原文本));
连接文本=L"接受客户数据失败\r\n";
lstrcat(原文本,连接文本);
SetDlgItemText(hdlg,IDC_EDIT1,原文本);
closesocket(套接字);
WSACleanup();
return -1;
}
else{
GetDlgItemText(hdlg,IDC_EDIT1,原文本,sizeof(原文本));
连接文本=L"接受客户数据成功\r\n";
lstrcat(原文本,连接文本);
SetDlgItemText(hdlg,IDC_EDIT1,原文本);
GetDlgItemText(hdlg,IDC_EDIT1,原文本,sizeof(原文本));
数据大小[BRet]='\0';
连接文本=(LPWSTR)数据大小;
lstrcat(原文本,连接文本);
SetDlgItemText(hdlg,IDC_EDIT1,原文本);
break;
}
}
default:
BRet=FALSE;
break;
}
return BRet;
}
int WinMain(HINSTANCE hInstance,HINSTANCE hprevinstance,
PSTR szCmdline,int iCmdshow)
{
DialogBox(hInstance,MAKEINTRESOURCE(ZMAIN),NULL,proca);
return 0;
}
真的是欲哭无泪了 这个代码 到了recv()这一步问题就来了 点击一下recv对应的按钮吧 先是提升错误代码10038 在非套接字上操作,之后了就都提示错误码10093 套接字没初始化 实在是不知道咋个解决了 求大神看看
|
|