win32 socket的一个简单的例子
2012-04-27 01:03
211 查看
在visual c++里建两个win32控制台工程,分别编译下面的服务端和客户端
服务端:
====================================================================================================
客户端:
服务端:
#include <windows.h> #include <iostream.h> #include <winsock.h> #pragma comment(lib,"ws2_32.lib") #define NO_FLAGS_SET 0 #define PORT (u_short)44965 #define MAXBUFLEN 256 //服务器 -- VC++ Socket编程 简单的Tcp/ip服务器 int main() { WSADATA Data; SOCKADDR_IN serverSockAddr; SOCKADDR_IN clientSockAddr; SOCKET serverSocket; SOCKET clientSocket; int addrLen=sizeof(SOCKADDR_IN); int status; int numrcv; char buffer[MAXBUFLEN]; /* initialize the Windows Socket DLL */ status=WSAStartup(MAKEWORD(1, 1), &Data); if (status != 0) cerr << "ERROR: WSAStartup unsuccessful" << endl; /* zero the sockaddr_in structure */ memset(&serverSockAddr, 0, sizeof(serverSockAddr)); /* specify the port portion of the address */ serverSockAddr.sin_port=htons(PORT); /* specify the address family as Internet */ serverSockAddr.sin_family=AF_INET; /* specify that the address does not matter */ serverSockAddr.sin_addr.s_addr=htonl(INADDR_ANY); /* create a socket socket(通信发生的区域,套接字的类型,套接字使用的特定协议) */ serverSocket = socket(AF_INET, SOCK_STREAM, 0); if (serverSocket == INVALID_SOCKET) cerr << "ERROR: socket unsuccessful" << endl; /* associate the socket with the address */ status=bind(serverSocket, (LPSOCKADDR)&serverSockAddr, sizeof(serverSockAddr)); if (status == SOCKET_ERROR) cerr << "ERROR: bind unsuccessful" << endl; /* allow the socket to take connections listen(已建立、尚未连接的套接字号,连接队列的最大长度) */ status=listen(serverSocket, 1); if (status == SOCKET_ERROR) cerr << "ERROR: listen unsuccessful" << endl; /* accept the connection request when one is received */ clientSocket=accept(serverSocket, (LPSOCKADDR)&clientSockAddr, &addrLen); cout << "Got the connection..." << endl; while(1) { /* recv(已连接的套接字, 接收输入数据缓冲区的指针, 缓冲区大小, 传输控制方式) */ numrcv=recv(clientSocket, buffer, MAXBUFLEN, NO_FLAGS_SET); if ((numrcv == 0) || (numrcv == SOCKET_ERROR)) { cout << "Connection terminated." << endl; status=closesocket(clientSocket); if (status == SOCKET_ERROR) cerr << "ERROR: closesocket unsuccessful" << endl; status=WSACleanup(); if (status == SOCKET_ERROR) cerr << "ERROR: WSACleanup unsuccessful" << endl; return(1); } cout << buffer << endl; } /* while */ }
====================================================================================================
客户端:
#include <windows.h> #include <winsock.h> #include <iostream.h> #pragma comment(lib,"ws2_32.lib") #define NO_FLAGS_SET 0 #define PORT (u_short)44965 #define DEST_IP_ADDR "192.168.0.7" //Server address //客户端 --VC++ Socket编程 简单的Tcp/ip客户端 int main() { WSADATA Data; SOCKADDR_IN destSockAddr; SOCKET destSocket; unsigned long destAddr; int status; int numsnt; char *toSendtxt="Test String"; /* initialize the Windows Socket DLL */ status=WSAStartup(MAKEWORD(1, 1), &Data); if (status != 0) cerr << "ERROR: WSAStartup unsuccessful" << endl; /* convert IP address into in_addr form */ destAddr=inet_addr(DEST_IP_ADDR); /* copy destAddr into sockaddr_in structure */ memcpy(&destSockAddr.sin_addr, &destAddr, sizeof(destAddr)); /* specify the port portion of the address */ destSockAddr.sin_port=htons(PORT); /* specify the address family as Internet */ destSockAddr.sin_family=AF_INET; /* create a socket */ destSocket=socket(AF_INET, SOCK_STREAM, 0); if (destSocket == INVALID_SOCKET) { cerr << "ERROR: socket unsuccessful" << endl; status=WSACleanup(); if (status == SOCKET_ERROR) cerr << "ERROR: WSACleanup unsuccessful" << endl; return(1); } cout << "Trying to connect to IP Address: " << DEST_IP_ADDR << endl; /* connect to the server */ status=connect(destSocket, (LPSOCKADDR)&destSockAddr, sizeof(destSockAddr)); if (status == SOCKET_ERROR) { cerr << "ERROR: connect unsuccessful" << endl; status=closesocket(destSocket); if (status == SOCKET_ERROR) cerr << "ERROR: closesocket unsuccessful" << endl; status=WSACleanup(); if (status == SOCKET_ERROR) cerr << "ERROR: WSACleanup unsuccessful" << endl; return(1); } cout << "Connected..." << endl; while(1) { cout << "Sending..." << endl; numsnt=send(destSocket, toSendtxt, strlen(toSendtxt) + 1, NO_FLAGS_SET); if (numsnt != (int)strlen(toSendtxt) + 1) { cout << "Connection terminated" << endl; status=closesocket(destSocket); if (status == SOCKET_ERROR) cerr << "ERROR: closesocket unsuccessful" << endl; status=WSACleanup(); if (status == SOCKET_ERROR) cerr << "ERROR: WSACleanup unsuccessful" << endl; return(1); } /* Wait before sending the message again */ Sleep(1000); } /* while */ }
相关文章推荐
- win32 socket的一个简单的例子 控制台
- socket编程---一个简单例子
- NodeJS+Express+Socket.io的一个简单例子
- socket计划——一个简单的例子
- socket编程——一个简单的例子
- 一个最简单的Socket通信例子
- 一个最简单的Socket通信例子
- Socket 同步编程的一个简单例子,适合初学者
- 一个简单的socket例子
- win32 api 创建窗口的一个简单例子
- 一个最简单的socket通信的例子
- 一个简单的socket例子
- win32 socket的两个简单的例子
- socket编程——一个简单的例子
- Java WebSocket编程——一个简单的例子(编程式)
- 【socket编程】一个简单的基于UDP的客户/服务端例子(vs2008)
- 一个简单的PHP的进程加socket加WS的例子
- 一个简单的socket客户端和服务端的例子
- 一个win32平台的socket简单程序
- socket编程——一个简单的例子