Socket TCP/IP Sample

// Server.cpp
#include <stdlib.h>
#include <stdio.h>
#include <tchar.h>
#include <WinSock2.h>
#pragma comment(lib, "Ws2_32.lib")
#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "27015"

int _tmain()
{
 WSADATA wsaData;
 int iResult;

 SOCKET ConnectSocket;
 struct sockaddr_in clientService;

 char *sendbuf = "this is a test";
 char recvbuf[DEFAULT_BUFLEN];
 int recvbuflen = DEFAULT_BUFLEN;

 iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
 if (iResult != NO_ERROR)
 {
  printf("WSAStartup failed: %d/n", iResult);
  return 1;
 }
 
 // Create a SOCKET for connecting to server
 ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 if (ConnectSocket == INVALID_SOCKET)
 {
  printf("Error at socket(): %ld/n", WSAGetLastError() );
  WSACleanup();
  return 1;
 }

 sockaddr_in service;
 service.sin_family = AF_INET;
 service.sin_addr.s_addr = inet_addr("127.0.0.1");
 service.sin_port = htons(27015);
 bind(ConnectSocket, (SOCKADDR*)&service, sizeof(service));

 listen(ConnectSocket, 10);

 int len;
 sockaddr_in addrclient;
 SOCKET s_d = accept(ConnectSocket,(sockaddr*)&addrclient,&(len=sizeof(sockaddr)));
 do
 {
  memset(recvbuf, 0x00, recvbuflen);
  iResult = recv(s_d, recvbuf, recvbuflen, 0);
  if ( iResult > 0 )
   printf("Bytes received: %d. [%s]/n", iResult, recvbuf);
  else if ( iResult == 0 )
   printf("Connection closed/n");
  else
   printf("recv failed: %d/n", WSAGetLastError());
  Sleep(3000);
 } while( iResult > 0 );

 return 0;
}


// Client.cpp
#include <winsock2.h>
#include <stdio.h>
#include <tchar.h>
#pragma comment(lib, "Ws2_32.lib")

#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "27015"
#define NO_FLAGS_SET 0

int _tmain()
{
 WSADATA Data;
 SOCKADDR_IN destSockAddr;
 SOCKET destSocket;
 unsigned long destAddr;
 int status;
 int numsnt;

 char *toSendtxt = "Test String";

 status = WSAStartup(MAKEWORD(2, 2), &Data);

 destSocket=socket(AF_INET, SOCK_STREAM, 0);

 destSockAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
 destSockAddr.sin_port = htons(27015);
 destSockAddr.sin_family = AF_INET;
 status=connect(destSocket, (LPSOCKADDR) &destSockAddr, sizeof(destSockAddr));
 if (status == SOCKET_ERROR)
 {
  status=WSACleanup();
  return(1);
 }

 while(1)
 {
  numsnt=send(destSocket, toSendtxt,  strlen(toSendtxt) + 1, NO_FLAGS_SET);
  if (numsnt != (int)strlen(toSendtxt) + 1)
  {
   status=closesocket(destSocket);
   if (status == SOCKET_ERROR)
    status=WSACleanup();
   
   return(1);
  }

  /* Wait before sending the message again */
  Sleep(1);
 } /* while */

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章