win32 socket的一个简单的例子 控制台
生活随笔
收集整理的這篇文章主要介紹了
win32 socket的一个简单的例子 控制台
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#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 <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?*/?? }??
在visual c++里建兩個win32控制臺工程,分別編譯下面的服務端和客戶端
服務端:
[cpp] view plaincopyprint?====================================================================================================
客戶端:
[cpp] view plaincopyprint?總結
以上是生活随笔為你收集整理的win32 socket的一个简单的例子 控制台的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 读【36岁IT老人再次随笔】的读后感,你
- 下一篇: H.264码率控制机制