代码:
//Filename: TestSocketTCP.cpp //Author:smoke //mail:smoke@tomydan.net //last:2003-12 //description: //this is program show a TCP server and a TCP client alternating... //it very simple :) //usage: //testsockettcp.exe server [starting server mode] //testsockettcp.exe client "message for send to server!" [client mode] //compile in vc 6.0
////////////////////////////////////////////////////////////////////////// // header file //////////////////////////////////////////////////////////////////////////
#include "stdafx.h" #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") #define BUFSIZE 1024 #define PORT60001 BOOL CreateTcpServer(int port); int DoClient(char* sendmsg); int main(int argc, char* argv[]) { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return FALSE; } if(argc < 2) return 0; if(argc == 2) { if(strcmp(argv[1],"server") != 0) return 0; CreateTcpServer(PORT); } if(argc == 3) { if(strcmp(argv[1],"client") !=0) return 0; DoClient(argv[2]); } else { printf("Input error!\n"); } WSACleanup(); return 0; }
//Function Description: //Create the tcp server to recv the client... //In tcp recv the data-buffer will accpet first, it different form UDP. //Get the more message form about socket or MSDN BOOL CreateTcpServer(int port) { SOCKET sockfd,mAppept; struct sockaddr_in servaddr; struct sockaddr_in clieaddr; sockfd = socket(AF_INET,SOCK_STREAM,0); if(sockfd < 0) { printf("Create server socket error!\n"); return FALSE; } memset(&servaddr,0,sizeof(sockaddr_in)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(port); if(bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) < 0) { printf("Bind error in socket!\n"); return FALSE; } listen(sockfd,10); int iLen = sizeof(sockaddr_in); printf("Starting server OK!\nRecving...\n"); while (1) { mAppept = accept(sockfd,(struct sockaddr*)&clieaddr,&iLen); if(mAppept != INVALID_SOCKET ) { char buffer[BUFSIZE]; memset(buffer,0,sizeof(buffer)); int iRecv = recv(mAppept,buffer,BUFSIZE,0); if(iRecv <= 0) printf("Recv error!\n"); printf("recv: %s \n",buffer); if(strcmp(buffer,"QUIT") == 0) break; } } printf("Quit Server...\n"); return TRUE; }
//Function Description: //In tcp send data-buffer will connect to the server first,it different form udp //Get the more message form about socket or MSDN int DoClient(char* sendmsg) { SOCKET sockfd; struct sockaddr_in clientaddr; int iRes;
sockfd = socket(AF_INET,SOCK_STREAM,0); if(sockfd < 0) { printf("Create client socket error!\n"); return 0; } clientaddr.sin_family = AF_INET; clientaddr.sin_addr.s_addr = inet_addr("192.168.1.13"); clientaddr.sin_port = htons(PORT); iRes = connect(sockfd,(struct sockaddr*)&clientaddr,sizeof(clientaddr)); if(iRes < 0) { printf("Can not create connection!\n"); return 0; } iRes = send(sockfd,sendmsg,strlen(sendmsg),0); if(iRes <= 0) { printf("Send error!\n"); return 0; } printf("Send '%s' OK!\n",sendmsg); return 0; }
|