qq513051043 发表于 2015-8-4 21:14:15

socket 10038 10093问题


#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 原文本;

        LPWSTR 连接文本;
WSADATAwsadata;
SOCKADDR_IN 服务器地址;
int 客户长度;
SOCKADDR_IN 客户端地址;
       int 是否成功;
        // SOCKET 套接字;
       

       char 文本;
       DWORD 数字=100;
       char 数据大小;

       //用来储存调用AfxSocketInit全局函数返回的Windows Sockets初始化信息
        switch(umsg)
        {   
        case WM_CLOSE:
                EndDialog(hdlg,0);
                break;
        caseWM_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(原文本));
                                数据大小='\0';


                                连接文本=(LPWSTR)数据大小;
                                lstrcat(原文本,连接文本);
                                SetDlgItemText(hdlg,IDC_EDIT1,原文本);




                                break;
                        }


}


       
    default:
                BRet=FALSE;
                break;       

        }
        return BRet;
}
intWinMain(HINSTANCE hInstance,HINSTANCE hprevinstance,
        PSTR szCmdline,int iCmdshow)
{
        DialogBox(hInstance,MAKEINTRESOURCE(ZMAIN),NULL,proca);
        return 0;
}


真的是欲哭无泪了这个代码 到了recv()这一步问题就来了 点击一下recv对应的按钮吧 先是提升错误代码10038在非套接字上操作,之后了就都提示错误码10093套接字没初始化 实在是不知道咋个解决了 求大神看看
页: [1]
查看完整版本: socket 10038 10093问题