我做的是服务器和客户端的连接程序,我现在这个程序在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;
}
这个是服务器的代码!我采用的是动态的连接!!
#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;
}
这个是服务器的代码!我采用的是动态的连接!!
没有问题啊。