我做的是服务器和客户端的连接程序,我现在这个程序在VC++6.0能运行,但没结果啊!!下面这是我的程序代码!
#include "stdafx.h"
#include "Client.h"#include "MainFrm.h"
#include "ClientDoc.h"
#include "ClientView.h"/***********************************************************/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>#define  DEFAULT_MAXS       128
#define  DEFAULT_MAXM       1024
#define  DEFAULT_COUNT      20
#define  DEFAULT_PORT       5150
#define  DEFAULT_BUFFER     2048
#define  DEFAULT_MESSAGE    "This is a test of the emergency \ broadcasting system\n"char     szServer[DEFAULT_MAXS],
         szMessage[DEFAULT_MAXM];
int      iPort     = DEFAULT_PORT;
DWORD    dwCount   = DEFAULT_COUNT;
BOOL     bSendOnly = FALSE;void     usage();
void     ValidateArgs(int argc, char **argv);
/***********************************************************/
void usage()
{
printf("Usage: client [-p:x] [-s:IP] [-n:x] [-o]\n\n");
printf("       -p:x      Remote port to send to \n");
printf("       -s:IP     Server's IP address or host name \n");
printf("       -n:x      Number of times to send message\n");
printf("       -o        Send message only: don't receive\n"); ExitProcess(1);

/***********************************************************/
void ValidateArgs(int argc, char **argv)
{
for(int i = 0; i < argc; i++)
{
if ((argv[i][0] == '-') || (argv[i][0] == '/'))
{
switch (tolower(argv[i][1]))
{
    case 'p':
    if (strlen(argv[i]) > 3)
    iPort = atoi(&argv[i][3]);

    break;
    case 's':
if (strlen(argv[i]) > 3)
strcpy(szServer, &argv[i][3]); break;
case 'n':
if (strlen(argv[i]) > 3)
dwCount = atol(&argv[i][3]); break;
case 'o':
bSendOnly = TRUE; break;
default:
usage(); break;
}
}
}
}
/***********************************************************/
int main(int argc, char **argv)
{
WSADATA            wsd;
SOCKET             sClient;
char               szBuffer[DEFAULT_BUFFER];
int                ret;
    
struct sockaddr_in server;
struct hostent     *host = NULL; ValidateArgs(argc, argv);

if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
printf("Failed to load Winsock library!\n"); return 1;
}
    
strcpy(szMessage, DEFAULT_MESSAGE); sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sClient == INVALID_SOCKET)
{
printf("socket() failed: %d\n", WSAGetLastError()); return 1;
}
    
server.sin_family = AF_INET;
server.sin_port   = htons(iPort);
server.sin_addr.s_addr = inet_addr(szServer); if (server.sin_addr.s_addr == INADDR_NONE)
{
host = gethostbyname(szServer); if (host == NULL)
{
printf("Unable to resolve server: %s\n", szServer); return 1;
} CopyMemory(&server.sin_addr, 
       host->h_addr_list[0], 
   host->h_length);
} if(connect(sClient, (struct sockaddr *)&server, sizeof(server)) == SOCKET_ERROR)
    {
printf("connect() failed: %d\n", WSAGetLastError()); return 1;
} for(int i = 0; i < int(dwCount); i++)
{
ret = send(sClient, szMessage, strlen(szMessage), 0); if (ret == 0)
break;
else 
if (ret == SOCKET_ERROR)
{
printf("send() failed: %d\n", WSAGetLastError()); break;
} printf("Send %d bytes...\n", ret); if (!bSendOnly)
{
ret = recv(sClient, szBuffer, DEFAULT_BUFFER, 0); if (ret == 0)
break;
else 
if (ret == SOCKET_ERROR)
{
printf("recv() failed: %d\n",WSAGetLastError()); break;
} szBuffer[ret] = '\0'; printf("RECV [%d bytes]: '%s'\n", ret, szBuffer);
}  
}
closesocket(sClient); WSACleanup(); return 0;
}
这个是客户端的代码!
#include "stdafx.h"
#include "Server.h"/****************************************************/
#include "stdio.h"
#include "stdlib.h"#define DEFAULT_PORT      5150
#define DEFAULT_BUFFER    4096int     iPort      = DEFAULT_PORT;
BOOL    bInterface = FALSE,
        bRecvOnly  = FALSE;
char    szAddress[128];
/****************************************************/
void usage()
{
printf("Usage: server [-p:x] [-i:IP] [-o]\n\n");
printf("       -p:x      Port number to listen on...\n");
printf("       -i:str    Interface to listen on...\n");
printf("       -o        Don't echo the data back\n\n"); ExitProcess(1);
}
/****************************************************/
void ValidateArgs(int argc, char **argv)
{
for(int i = 0; i < argc; i++)
{
if ((argv[i][0] == '-') || (argv[i][0] == '/'))
{
switch(tolower(argv[i][1]))
{
case 'p':
iPort = atoi(&argv[i][3]); break;
case 'i':
bInterface = TRUE; if (strlen(argv[i]) > 3)
strcpy(szAddress, &argv[i][3]); break;
case 'o':
bRecvOnly = TRUE; break;
default:
usage(); break;
}
}
}
}
/****************************************************/
DWORD WINAPI ClientThread(LPVOID lpParam)
{
SOCKET     sock = (SOCKET)lpParam;
char       szBuff[DEFAULT_BUFFER];
int        ret,
       nLeft,
   idx; while(1)
{
ret = recv(sock, szBuff, DEFAULT_BUFFER, 0); if (ret == 0)
break;
else 
if(ret == SOCKET_ERROR)
{
printf("recv() failed: %d \n", WSAGetLastError()); break;
}
szBuff[ret] = '\0'; printf("RECV: '%s'\n", szBuff); if(!bRecvOnly)
{
nLeft = ret;
idx   = 0; while(nLeft > 0)
{
ret = send(sock, &szBuff[idx], nLeft, 0); if(ret == 0)
break;
else 
if(ret == SOCKET_ERROR)
{
printf("send() failed: %d\n", WSAGetLastError()); break;
}
    
nLeft -= ret;
idx   += ret;
}
}
} return 0;
}
/****************************************************/
int main(int argc, char **argv)
{
WSADATA            wsd;
SOCKET             sListen,
               sClient;
int                iAddrSize;
HANDLE             hThread;
DWORD              dwThreadId;
struct sockaddr_in local,
               client; ValidateArgs(argc, argv); if(WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
printf("Failed to load Winsock!\n"); return 1;
}    sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);

if(sListen == SOCKET_ERROR)
{
printf("socket() failed: %d\n", WSAGetLastError()); return 1;
} if (bInterface)
{
local.sin_addr.s_addr = inet_addr(szAddress); if(local.sin_addr.s_addr == INADDR_NONE)
usage();
}
else 
local.sin_addr.s_addr = htonl(INADDR_ANY); local.sin_family = AF_INET;
local.sin_port   = htons(iPort); if(bind(sListen, (struct sockaddr *)&local, sizeof(local)) == SOCKET_ERROR)
{
printf("bind() failed: %d \n",WSAGetLastError()); return 1;
} listen(sListen, 8); while (1)
{
iAddrSize = sizeof(client); sClient   = accept(sListen, (struct sockaddr *)&client, &iAddrSize); if (sClient == INVALID_SOCKET)
{
printf("accept() failed: %d \n", WSAGetLastError()); break;
} printf("Accepted client: %s:%d\n",inet_ntoa(client.sin_addr), 
                              ntohs(client.sin_port)); hThread = CreateThread(NULL, 0, ClientThread,
                   (LPVOID)sClient, 0, &dwThreadId); if (hThread == NULL)
{
printf("CreateThread() failed: %d \n", GetLastError()); break;
} CloseHandle(hThread);
} closesocket(sListen); WSACleanup(); return 0;
}
这个是服务器的代码!我采用的是动态的连接!!