压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

服務器/客戶端:winsock 編程初體驗

  前日看到聽風大哥的帖子<初學黑客編程(1)>,寫的是windows下的C/S程序的簡易示例代碼,頓時有了感覺。以前在linux下寫過,但是不知道如何去實際應用,便放在了一邊。昨晚認真的拜讀、改寫了一下。今日記錄下來,作為保留。

  代碼如下:

  服務端:

  /*Service*/

  #include <winsock2.h>    //初始化網絡編程函數

  #include <stdio.h>

  #pragma comment(lib,"ws2_32")   //靜態函數庫的初始化

  #define PORT 139                //這個是用端口掃描器掃描的結果中任選的一個

  int main(int argc,char *argv[])

  {

  system("cls");   //清屏

  //定義一個數據類型是DSADATA的wsaData的變量

  //wsaData結構被用來保存AfxSocketlnit函數返回的Windows Sockets初始化信息

  WSADATA wsaData;

  WORD sockVersion = MAKEWORD(2,2);

  //加載winsock庫,初始化系統環境,以便以后關于網絡的函數調用

  if(WSAStartup(sockVersion,&wsaData)!=0)

  {

  return -1;

  }

  //創建一個套接字,也就是我們的監聽的端口

  SOCKET sListen = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);

  //判斷創建是否成功,失敗返回INVALID_SOCKET

  if(sListen == INVALID_SOCKET)

  {

  printf("socket error !
");

  return -1;

  }

  //在sockaddr_in結構中裝入地址信息

  sockaddr_in sin;

  sin.sin_family = PF_INET;

  sin.sin_port = htons(PORT);  //htons:將主機無符號短整型數轉換成網絡字節順序

  sin.sin_addr.S_un.S_addr = INADDR_ANY;

  //套接字和本地地址綁定

  if(bind(sListen,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)

  {

  printf("bind error !
");

  closesocket(sListen);

  return -1;

  }

  //設置套接字進入監聽模式

  if(listen(sListen,1)==SOCKET_ERROR)

  {

  printf("listen error !
");

  closesocket(sListen);

  return -1;

  }

  //接受客戶端的連接請求

  sockaddr_in remoteAddr;

  SOCKET sClient;

  int nAddrlen = sizeof(remoteAddr);

  char revData[255];

  printf("等待連接…");

  //接受一個新連接

  sClient = accept(sListen,(SOCKADDR *)&remoteAddr,&nAddrlen);

  if(sClient == INVALID_SOCKET)

  {

  printf("accept error !
");

  closesocket(sListen);

  return -1;

  }

  //打印出連接者的ip

  printf("
接收到一個連接:%s
",inet_ntoa(remoteAddr.sin_addr));

  int flag = 1;

  while(flag)

  {

  //直到連接到有效數據才打印出來

  int ret = recv(sClient,revData,sizeof(revData),0);

  if(ret > 0)

  {

  // 為防止打印出錯,把字符串結尾設為0x00

  revData[ret] = 0x00;

  printf("Client : ");

  printf("%s
",revData);

  }

  if(strcmp(revData,"quit