Public feed #601962

Mine

public text v1 · immutable
Raw Edit
·published 2007-07-03 20:30 UTC
rendered paste body
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
#include <string.h>

#define NETWORK_ERROR -1
#define NETWORK_OK     0

void ReportError(int, const char *);


int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmd, int nShow) {
WORD sockVersion;
WSADATA wsaData;
int nret;
char send1[100] = "Hello";
char recv1[100];
char ip[MAX_PATH] = "216.178.39.14";          

sockVersion = MAKEWORD(1, 1); // We'd like Winsock version 1.1


// We begin by initializing Winsock
WSAStartup(sockVersion, &wsaData);


// Next, create the listening socket
SOCKET listeningSocket;

listeningSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

//////////////ERROR/////////////////////////
if (listeningSocket == INVALID_SOCKET) {
nret = WSAGetLastError(); // Get a more detailed error
ReportError(nret, "socket()"); // Report the error with our custom function
WSACleanup(); // Shutdown Winsock
return NETWORK_ERROR; // Return an error value
}
///////////////////////////////////////////////////////////

// Use a SOCKADDR_IN struct to fill in address information
SOCKADDR_IN serverInfo;
serverInfo.sin_family = AF_INET;
serverInfo.sin_port = 80;
serverInfo.sin_addr.s_addr=inet_addr (ipa);// Since this socket is listening for connections,
// any local address will do
 // Convert integer 8888 to network-byte order
// and insert into the port field


// Bind the socket to our local server address
nret = bind(listeningSocket, (LPSOCKADDR)&serverInfo, sizeof(struct sockaddr));

if (nret == SOCKET_ERROR) {
nret = WSAGetLastError();
ReportError(nret, "bind()");

send(listeningSocket,send1,sizeof(send1),MSG_OOB);

WSACleanup();
return NETWORK_ERROR;
}


// Make the socket listen
nret = listen(listeningSocket, 10); // Up to 10 connections may wait at any
// one time to be accept()'ed

if (nret == SOCKET_ERROR) {
nret = WSAGetLastError();
ReportError(nret, "listen()");

WSACleanup();
return NETWORK_ERROR;
}


// Wait for a client
SOCKET theClient;

theClient = accept(listeningSocket,
   NULL, // Address of a sockaddr structure (see explanation below)
   NULL); // Address of a variable containing size of sockaddr struct

if (theClient == INVALID_SOCKET) {
nret = WSAGetLastError();
ReportError(nret, "accept()");
recv(theClient,recv1,sizeof(recv1),MSG_PEEK);
WSACleanup();
return NETWORK_ERROR;
}


// Send and receive from the client, and finally,
closesocket(theClient);
closesocket(listeningSocket);


// Shutdown Winsock
WSACleanup();
return NETWORK_OK;
}


void ReportError(int errorCode, const char *whichFunc) {
   char errorMsg[92]; // Declare a buffer to hold
// the generated error message
   
   ZeroMemory(errorMsg, 92); // Automatically NULL-terminate the string

   // The following line copies the phrase, whichFunc string, and integer errorCode into the buffer
   sprintf(errorMsg, "Call to %s returned error %d!", (char *)whichFunc, errorCode);

   MessageBox(NULL, errorMsg, "socketIndication", MB_OK);
}