亚洲日本免费-啊轻点灬太粗太长了三男一女-麻豆av电影在线观看-日韩一级片毛片|www.grbbt.com

服務(wù)器/客戶端:winsock 編程初體驗(yàn)

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

  代碼如下:

  服務(wù)端:

  /*Service*/

  #include <winsock2.h>    //初始化網(wǎng)絡(luò)編程函數(shù)

  #include <stdio.h>

  #pragma comment(lib,"ws2_32")   //靜態(tài)函數(shù)庫(kù)的初始化

  #define PORT 139                //這個(gè)是用端口掃描器掃描的結(jié)果中任選的一個(gè)

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

  {

  system("cls");   //清屏

  //定義一個(gè)數(shù)據(jù)類型是DSADATA的wsaData的變量

  //wsaData結(jié)構(gòu)被用來(lái)保存AfxSocketlnit函數(shù)返回的Windows Sockets初始化信息

  WSADATA wsaData;

  WORD sockVersion = MAKEWORD(2,2);

  //加載winsock庫(kù),初始化系統(tǒng)環(huán)境,以便以后關(guān)于網(wǎng)絡(luò)的函數(shù)調(diào)用

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

  {

  return -1;

  }

  //創(chuàng)建一個(gè)套接字,也就是我們的監(jiān)聽的端口

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

  //判斷創(chuàng)建是否成功,失敗返回INVALID_SOCKET

  if(sListen == INVALID_SOCKET)

  {

  printf("socket error !
");

  return -1;

  }

  //在sockaddr_in結(jié)構(gòu)中裝入地址信息

  sockaddr_in sin;

  sin.sin_family = PF_INET;

  sin.sin_port = htons(PORT);  //htons:將主機(jī)無(wú)符號(hào)短整型數(shù)轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)順序

  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;

  }

  //設(shè)置套接字進(jìn)入監(jiān)聽模式

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

  {

  printf("listen error !
");

  closesocket(sListen);

  return -1;

  }

  //接受客戶端的連接請(qǐng)求

  sockaddr_in remoteAddr;

  SOCKET sClient;

  int nAddrlen = sizeof(remoteAddr);

  char revData[255];

  printf("等待連接…");

  //接受一個(gè)新連接

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

  if(sClient == INVALID_SOCKET)

  {

  printf("accept error !
");

  closesocket(sListen);

  return -1;

  }

  //打印出連接者的ip

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

  int flag = 1;

  while(flag)

  {

  //直到連接到有效數(shù)據(jù)才打印出來(lái)

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

  if(ret > 0)

  {

  // 為防止打印出錯(cuò),把字符串結(jié)尾設(shè)為0x00

  revData[ret] = 0x00;

  printf("Client : ");

  printf("%s
",revData);

  }

  if(strcmp(revData,"quit