CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

100求c的socket通讯方面的文章或者例子

楼主herofour444(不只是吸引)2004-12-01 18:41:26 在 C/C++ / C语言 提问

多谢 问题点数:0、回复次数:5Top

1 楼MCR()回复于 2004-12-01 18:45:14 得分 0

网上搜索很多的Top

2 楼DuoFG(多非光)回复于 2004-12-01 18:57:44 得分 0

/*  
    *   TCP   Stream   Socket   Client  
    *   这个例子说明了如何实现一个Winsock的客户端。  
    *   它做的工作非常简单,负责发送一条消息到服务器,并且接收从服务器的返回信息。  
    *   如果指定服务器名为"localhost",这个程序和TCP   Stream   Socket   Server这个例子运行在同一台机器上。  
    *   也可以通过指定其他服务器名来在不同的机器上工作。  
  */  
  #include   <windows.h>    
  #include   <winsock.h>  
   
  #define   PORTNUM                   5000                     //   端口号  
  #define   HOSTNAME                 "localhost"       //   服务器名字  
                                                                              //   根据服务器的不同,更改上面的名字  
                                                                               
  int   WINAPI   WinMain   (  
                              HINSTANCE   hInstance,         //   实例句柄  
                              HINSTANCE   hPrevInstance,//   NULL  
                              LPTSTR   lpCmdLine,               //   用于运行程序的命令行  
                              int   nCmdShow)                       //   程序的最初的显示方式  
  {  
      int   index   =   0,                                             //   索引  
              iReturn;                                                 //   recv函数的返回值  
      char   szClientA[100];                                 //   ASCII码串  
      TCHAR   szClientW[100];                               //   Unicode串  
      TCHAR   szError[100];                                   //   出错消息串  
   
      SOCKET   ServerSock   =   INVALID_SOCKET;   //   服务器的socket  
      SOCKADDR_IN   destination_sin;                 //   服务器的socket地址  
      PHOSTENT   phostent   =   NULL;                       //   指向服务器的HOSTENT结构  
      WSADATA   WSAData;                                         //   包含了Winsocket执行后的细节  
   
      //   初始化Winsocket.    
      if   (WSAStartup   (MAKEWORD(1,1),   &WSAData)   !=   0)    
      {  
          wsprintf   (szError,   TEXT("WSAStartup   failed.   Error:   %d"),    
                              WSAGetLastError   ());  
          MessageBox   (NULL,   szError,   TEXT("Error"),   MB_OK);  
          return   FALSE;  
      }  
   
      //   创建一个绑定服务器的TCP/IP   socket  
      if   ((ServerSock   =   socket   (AF_INET,   SOCK_STREAM,   0))   ==   INVALID_SOCKET)  
      {  
          wsprintf   (szError,   TEXT("Allocating   socket   failed.   Error:   %d"),    
                              WSAGetLastError   ());  
          MessageBox   (NULL,   szError,   TEXT("Error"),   MB_OK);  
          return   FALSE;  
      }  
   
      //   把服务器的socket的地址信息填入  
      destination_sin.sin_family   =   AF_INET;  
   
      //   通过主机名取得主机信息  
      if   ((phostent   =   gethostbyname   (HOSTNAME))   ==   NULL)    
      {  
          wsprintf   (szError,   TEXT("Unable   to   get   the   host   name.   Error:   %d"),    
                              WSAGetLastError   ());  
          MessageBox   (NULL,   szError,   TEXT("Error"),   MB_OK);  
          closesocket   (ServerSock);  
          return   FALSE;  
      }  
   
      //   分配socket   IP地址  
      memcpy   ((char   FAR   *)&(destination_sin.sin_addr),    
                      phostent->h_addr,    
                      phostent->h_length);  
   
      //   转化端口字段为大终点  
      destination_sin.sin_port   =   htons   (PORTNUM);              
   
      //   建立一个到服务器socket的连接.  
      if   (connect   (ServerSock,    
                                (PSOCKADDR)   &destination_sin,    
                                sizeof   (destination_sin))   ==   SOCKET_ERROR)    
      {  
          wsprintf   (szError,    
                              TEXT("Connecting   to   the   server   failed.   Error:   %d"),  
                              WSAGetLastError   ());  
          MessageBox   (NULL,   szError,   TEXT("Error"),   MB_OK);  
          closesocket   (ServerSock);  
          return   FALSE;  
      }  
   
      //   向服务器发送信息  
      if   (send   (ServerSock,   "To   Server.",   strlen   ("To   Server.")   +   1,   0)  
                        ==   SOCKET_ERROR)    
      {  
          wsprintf   (szError,    
                              TEXT("Sending   data   to   the   server   failed.   Error:   %d"),  
                              WSAGetLastError   ());  
          MessageBox   (NULL,   szError,   TEXT("Error"),   MB_OK);  
      }  
   
      //   禁止服务器接收信息  
      shutdown   (ServerSock,   0x01);  
   
      for   (;;)  
      {  
          //   从服务器接收信息  
          iReturn   =   recv   (ServerSock,   szClientA,   sizeof   (szClientA),   0);  
   
          //   如果接收到服务器信息,显示之  
          if   (iReturn   ==   SOCKET_ERROR)  
          {  
              wsprintf   (szError,   TEXT("No   data   is   received,   recv   failed.")  
                                  TEXT("   Error:   %d"),   WSAGetLastError   ());  
              MessageBox   (NULL,   szError,   TEXT("Client"),   MB_OK);  
              break;  
          }  
          else   if   (iReturn   ==   0)  
          {  
              MessageBox   (NULL,   TEXT("Finished   receiving   data"),   TEXT("Client"),  
                                      MB_OK);  
              break;  
          }  
          else  
          {  
              //   把ASCII码字符串转换成Unicode码字符串  
              for   (index   =   0;   index   <=   sizeof   (szClientA);   index++)  
                  szClientW[index]   =   szClientA[index];  
   
              //   显示从服务器接收到的字符串  
              MessageBox   (NULL,   szClientW,   TEXT("Received   From   Server"),   MB_OK);  
          }  
      }  
   
      //   禁止服务器发送信息  
      shutdown   (ServerSock,   0x00);  
   
      //   关闭服务器socket.  
      closesocket   (ServerSock);  
   
      WSACleanup   ();  
   
      return   TRUE;  
  }Top

3 楼DuoFG(多非光)回复于 2004-12-01 18:57:57 得分 0

#include   "windows.h"  
  #include   "winsock.h"  
  #include   "resource.h"  
  #include   "PROCESS.H"  
   
  #define   STATUS_SEND           0  
  #define   STATUS_REVE           1  
  #define   STATUS_DONE           2  
   
  #define   WM_MESSAGE_REVED         (WM_USER+0)  
  #define   WM_MESSAGE_SENDED       (WM_USER+1)  
   
  #define   PORTNUM                   5000                     //   端口号  
  #define   HOSTNAME                 "localhost"       //   服务器名字  
                                                                              //   根据服务器的不同,更改上面的名字  
   
   
  typedef   struct  
  {  
          HWND         hwnd;  
          BOOL         bContinue;  
          SOCKET     ServerSock;  
  }  
  PARAMS,*PPARAMS;  
   
   
  //   ===   Function   Prototypes   ====================================================  
   
  BOOL   WINAPI   MainDlgProc(   HWND,   UINT,   WPARAM,   LPARAM   );  
  void         NetworkThread(PVOID   pvoid);  
   
  //   ===   Global   Variables   =======================================================  
   
  HINSTANCE       hInst;  
  char                 szClientA[100];                                 //   ASCII码串  
  TCHAR               szClientW[100];                               //   Unicode串  
  TCHAR               szSendBuffer[100];  
  TCHAR   szError[100];                                   //   出错消息串  
   
   
  //   ===   Application   Entry   Point   ================================================  
   
  int   APIENTRY   WinMain(   HINSTANCE   hInstance,   HINSTANCE   hPrev,   LPSTR   lpCmd,  
                                              int   nShow   )  
  {  
        WNDCLASS   wc;  
   
        GetClassInfo(   NULL,   WC_DIALOG,   &wc   );                     //     Get   dialog   box   class   info  
   
        wc.hInstance   =   hInstance;  
        wc.lpszClassName   =   "Client";                                   //     so's   we   can   superclass   it  
        wc.lpfnWndProc   =   DefDlgProc;                               //     all   this   for   an   icon...sheesh  
        wc.hIcon   =   LoadIcon(   hInstance,   MAKEINTRESOURCE(   100   )   );  
        wc.cbWndExtra   =   DLGWINDOWEXTRA;  
   
        if(   !   RegisterClass(   &wc   )   )                                     //     Quit   if   registration   fails  
              return(   FALSE   );  
   
        hInst   =   hInstance;                               //     Now   just   start   the   main   dialog   and   exit  
        DialogBox(   hInstance,   MAKEINTRESOURCE(ID_CLIENT),   NULL,   MainDlgProc   );  
        return(   FALSE   );  
  }  
   
  //   ===   Main   Dialog   Box   ========================================================  
   
  BOOL   WINAPI   MainDlgProc(   HWND   hDlg,   UINT   msg,   WPARAM   wParam,   LPARAM   lParam   )  
  {        
          static   SOCKET   ServerSock   =   INVALID_SOCKET;   //   服务器的socket  
          static   SOCKADDR_IN   destination_sin;                 //   服务器的socket地址  
          static   PHOSTENT   phostent   =   NULL;                       //   指向服务器的HOSTENT结构  
          static   WSADATA   WSAData;                                         //   包含了Winsocket执行后的细节  
          static   PARAMS       params;  
   
             
        switch(   msg   )  
        {  
        case   WM_INITDIALOG:  
                {  
           
                  if   (WSAStartup   (MAKEWORD(1,1),   &WSAData)   !=   0)    
          {  
                          wsprintf   (szError,   TEXT("WSAStartup   failed.   Error:   %d"),    
                                              WSAGetLastError   ());  
                          MessageBox   (NULL,   szError,   TEXT("Error"),   MB_OK);  
                          return   FALSE;  
            }  
                    return 0;  
                }  
             
                   
   
          case   WM_PAINT:                             //     Paint   dialog   box   background   COLOR_BTNFACE  
          {  
                  PAINTSTRUCT   ps;  
                  HDC   hDC;  
                  RECT   Rect;  
   
                  hDC   =   BeginPaint(   hDlg,   &ps   );  
                  GetClientRect(   hDlg,   &Rect   );  
                  FillRect(   hDC,   &Rect,   GetProp(   hDlg,   "BRUSH"   )   );  
                  EndPaint(   hDlg,   &ps   );  
                  return 0;  
          }  
   
          case         WM_MESSAGE_REVED:  
          {  
                  SetWindowText(   GetDlgItem(hDlg,IDC_EDIT1),   szClientW   );  
                  return 0;  
          }  
   
          case         WM_COMMAND:  
          {  
                  if(   wParam   ==   IDC_CONNECT   )                                                     //     连接服务器  
          {  
                          if   ((ServerSock   =   socket   (AF_INET,   SOCK_STREAM,   0))   ==   INVALID_SOCKET)  
          {  
                                  wsprintf   (szError,   TEXT("Allocating   socket   failed.   Error:   %d"),    
                                                      WSAGetLastError   ());  
                                  MessageBox   (NULL,   szError,   TEXT("Error"),   MB_OK);  
                                  return   FALSE;  
                    }  
   
                            //   把服务器的socket的地址信息填入  
                            destination_sin.sin_family   =   AF_INET;  
   
                            //   通过主机名取得主机信息  
                            if   ((phostent   =   gethostbyname   (HOSTNAME))   ==   NULL)    
                    {  
                                    wsprintf   (szError,   TEXT("Unable   to   get   the   host   name.   Error:   %d"),    
                                                      WSAGetLastError   ());  
                                    MessageBox   (NULL,   szError,   TEXT("Error"),   MB_OK);  
                                    closesocket   (ServerSock);  
                                    return   FALSE;  
                      }  
   
                              //   分配socket   IP地址  
                              memcpy   ((char   FAR   *)&(destination_sin.sin_addr),    
                                              phostent->h_addr,    
                                              phostent->h_length);  
   
                              //   转化端口字段为大终点  
                              destination_sin.sin_port   =   htons   (PORTNUM);              
   
                              //   建立一个到服务器socket的连接.  
                              if   (connect   (ServerSock,    
                                                        (PSOCKADDR)   &destination_sin,    
                                                        sizeof   (destination_sin))   ==   SOCKET_ERROR)    
                      {  
                                      wsprintf   (szError,    
                                                      TEXT("Connecting   to   the   server   failed.   Error:   %d"),  
                                                      WSAGetLastError   ());  
                                      MessageBox   (NULL,   szError,   TEXT("Error"),   MB_OK);  
                                      closesocket   (ServerSock);  
                                      return   FALSE;  
                      }  
                              params.hwnd   =   hDlg;  
                              params.bContinue   =   TRUE;  
                              params.ServerSock   =   ServerSock;  
                              _beginthread(NetworkThread,0,&params);  
          }  
           
                  else   if(wParam   ==   IDC_SEND   )  
          {  
                          GetWindowText(GetDlgItem(hDlg,IDC_EDIT),  
                                      szSendBuffer,GetWindowTextLength(GetDlgItem(hDlg,IDC_EDIT)));  
   
                          if   (send   (ServerSock,   szSendBuffer,   strlen   (szSendBuffer)   +   1,   0)  
                                                ==   SOCKET_ERROR)    
          {  
                                  wsprintf   (szError,    
                                                      TEXT("Sending   data   to   the   server   failed.   Error:   %d"),  
                                                      WSAGetLastError   ());  
                                  MessageBox   (NULL,   szError,   TEXT("Error"),   MB_OK);  
          }  
   
            }  
                  else   if(wParam   ==   IDCANCEL)  
          {  
                          EndDialog(   hDlg,   TRUE   );    
          }  
                  return(   TRUE   );  
          }  
           
        }  
        return   FALSE;  
  }        
                                                                                                        //     End   of   MainDlgProc()  
  void         NetworkThread(PVOID   pvoid)  
  {  
          volatile         PPARAMS   pparams;  
          int   index   =   0,                                             //   索引  
                              iReturn;                                                 //   recv函数的返回值  
   
          pparams   =   (PPARAMS)pvoid;  
   
          for   (;;)  
              {  
                  //   从服务器接收信息  
                  iReturn   =   recv   (pparams->ServerSock,   szClientA,   sizeof   (szClientA),   0);  
   
                  //   如果接收到服务器信息,显示之  
                  if   (iReturn   ==   SOCKET_ERROR)  
          {  
                      wsprintf   (szError,   TEXT("No   data   is   received,   recv   failed.")  
                                          TEXT("   Error:   %d"),   WSAGetLastError   ());  
                      MessageBox   (NULL,   szError,   TEXT("Client"),   MB_OK);  
                      break;  
          }  
                  else   if   (iReturn   ==   0)  
          {  
                      MessageBox   (NULL,   TEXT("Finished   receiving   data"),   TEXT("Client"),  
                                      MB_OK);  
                      break;  
          }  
                  else  
          {  
                      //   把ASCII码字符串转换成Unicode码字符串  
                      for   (index   =   0;   index   <=   sizeof   (szClientA);   index++)  
                          szClientW[index]   =   szClientA[index];  
   
                      //   显示从服务器接收到的字符串  
                      //   MessageBox   (NULL,   szClientW,   TEXT("Received   From   Server"),   MB_OK);  
                      SendMessage(pparams->hwnd,WM_MESSAGE_REVED,0,0);  
   
          }  
              }  
   
              //   禁止服务器发送信息  
              shutdown   (pparams->ServerSock,   0x00);  
   
              //   关闭服务器socket.  
              closesocket   (pparams->ServerSock);  
   
              WSACleanup   ();  
   
   
   
  }  
  Top

4 楼zhouhuaikun(怀空)回复于 2004-12-01 19:26:55 得分 0

dingTop

5 楼sw_man()回复于 2004-12-01 19:51:08 得分 0

最近在搞WEB服务器,看到LINUX中有用SOCKET建立TCP和UDP连接的c代码,网上很多.TCP/IP详解中也有讲到,但重在理论,建议看看....   :0Top

相关问题

  • 请提供一个关于c#实现的socket的网络通讯的例子
  • C#下类似CSocket得类是哪个?C#程序如何通讯?哪儿有网络通讯得例子
  • 谁能给我一个Socket通讯的例子
  • 一个Socket通讯例子程序的疑惑!
  • 高分请教:那有在C#里用MSCOMM32做串口通讯的例子???
  • 求java socket(作客户端)与vc socket(作服务端)通讯的例子!
  • 寻求SOCKET TCP C/S 长连接的例子!!!!
  • ××××××××求Delphi5中用标准SOCKET控件进行多线程通讯的例子×××××××
  • SCO UNix 的 c/c++ 编译器哪儿有? 带socket的例子哪儿有?
  • 关于C++和Java用Socket进行通讯的问题?

关键词

  • tcp/ip
  • 服务器
  • socket
  • idc
  • null
  • server
  • szerror
  • serversock
  • szsendbuffer
  • 例子

得分解答快速导航

  • 帖主:herofour444

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo