SOCKET

时间:2008-06-20 14:45:46   来源:论坛整理  作者:  编辑:chinaitzhe
哪位高人能说说SOCKET通信是怎么个思路..代码是什么个结构?初学..有点乱.
网友回复:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





#include <stdio.h>

#include "winsock2.h"



void main() {

  //----------------------

  // Initialize Winsock

  WSADATA wsaData;

  int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);

  if (iResult != NO_ERROR)

    printf("Error at WSAStartup()\n");



  //----------------------

  // Create a SOCKET for connecting to server

  SOCKET ConnectSocket;

  ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

  if (ConnectSocket == INVALID_SOCKET) {

    printf("Error at socket(): %ld\n", WSAGetLastError());

    WSACleanup();

    return;

  }



  //----------------------

  // The sockaddr_in structure specifies the address family,

  // IP address, and port of the server to be connected to.

  sockaddr_in clientService; 

  clientService.sin_family = AF_INET;

  clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );

  clientService.sin_port = htons( 27015 );



  //----------------------

  // Connect to server.

  if ( connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {

    printf( "Failed to connect.\n" );

    WSACleanup();

    return;

  }



  //----------------------

  // Declare and initialize variables.

  int bytesSent;

  int bytesRecv = SOCKET_ERROR;

  char sendbuf[32] = "Client: Sending data.";

  char recvbuf[32] = "";



  //----------------------

  // Send and receive data.

  bytesSent = send( ConnectSocket, sendbuf, strlen(sendbuf), 0 );

  printf( "Bytes Sent: %ld\n", bytesSent );



  while( bytesRecv == SOCKET_ERROR ) {

    bytesRecv = recv( ConnectSocket, recvbuf, 32, 0 );

    if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {

      printf( "Connection Closed.\n");

      break;

    }

    printf( "Bytes Recv: %ld\n", bytesRecv );

  }



  WSACleanup();

  return;

}



关键字:SOCKET,

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面