您的位置:首页 > 理论基础 > 计算机网络

TCP Socket编程 C/C++实现 (Windows Platform SDK)

2011-10-12 19:42 615 查看
TCP Socket编程 C/C++实现 (Windows Platform SDK)

Server:

------------------------------------------------------------

#pragma comment(lib, "ws2_32.lib")

#include <Winsock2.h>

#include <stdio.h>

void main()

{

//版本协商

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD(1,1); //0x0101

err = WSAStartup(wVersionRequested,&wsaData);

if(err!=0)

{

return;

}

if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)

//wsaData.wVersion!=0x0101

{

WSACleanup();

return;

}

//创建Socket

SOCKET sockSvr = socket(AF_INET,SOCK_STREAM,0);

//创建IP地址和端口

SOCKADDR_IN addrSvr;

addrSvr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

addrSvr.sin_family = AF_INET;

addrSvr.sin_port = htons(6000);

//绑定端口监听

bind(sockSvr,(SOCKADDR*)&addrSvr,sizeof(SOCKADDR));

listen(sockSvr,5);

sockaddr_in addrClient;

int len = sizeof(sockaddr);

while(true)

{

//阻塞方法,获得一个客户Socket连接

SOCKET sockConn = accept(sockSvr,(sockaddr*)&addrClient,&len);

char sendbuffer[128];

sprintf(sendbuffer,"Welcom %s!",inet_ntoa(addrClient.sin_addr));

//向客户Socket发送数据

send(sockConn,sendbuffer,strlen(sendbuffer)+1,0);

char recvbuffer[128];

//从客户Soc接受数据

recv(sockConn,recvbuffer,128,0);

printf("%s\n",recvbuffer);

//关闭Socket

closesocket(sockConn);

}

closesocket(sockSvr);

//释放Winsock资源

WSACleanup();

}

Client:

--------------------------------------------------------

#pragma comment (lib,"ws2_32.lib")

#include <Winsock2.h>

#include <stdio.h>

void main()

{

//版本协商

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD(1,1); //0x0101

err = WSAStartup(wVersionRequested,&wsaData);

if(err!=0)

{

return;

}

if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)

//wsaData.wVersion!=0x0101

{

WSACleanup();

return;

}

//创建连向服务器的套接字

SOCKET sock = socket(AF_INET,SOCK_STREAM,0);

//创建地址信息

SOCKADDR_IN hostAddr;

hostAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

hostAddr.sin_family = AF_INET;

hostAddr.sin_port = htons(6000);

//连接服务器

connect(sock,(sockaddr*)&hostAddr,sizeof(sockaddr));

char revBuf[128];

//从服务器获得数据

recv(sock,revBuf,128,0);

printf("%s\n",revBuf);

//向服务器发送数据

send(sock,"Hello Host!",12,0);

closesocket(sock);

}

转自:http://blog.csdn.net/nyzhl/archive/2008/07/04/2612815.aspx

UDP Socket编程 C/C++实现 (Windows Platform SDK)

Server:

-------------------------------------------------------

#pragma comment (lib,"ws2_32.lib")

#include <Winsock2.h>

#include <stdio.h>

void main()

{

//版本协商

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );

if ( err != 0 ) {

return;

}

if ( LOBYTE( wsaData.wVersion ) != 1 ||

HIBYTE( wsaData.wVersion ) != 1) {

WSACleanup( );

return;

}

//创建数据报套接字

SOCKET svr = socket(AF_INET,SOCK_DGRAM,0);

//创建本地地址信息

SOCKADDR_IN addr;

addr.sin_family = AF_INET;

addr.sin_port = htons(6000);

addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

int len = sizeof(sockaddr);

bind(svr,(sockaddr*)&addr,len);

//创建客户端地址对象

SOCKADDR_IN addrClient;

char recvBuf[128];

char sendBuf[128];

char tempBuf[256];

while(true)

{

//接收数据

recvfrom(svr,recvBuf,128,0,(sockaddr*)&addrClient,&len);

char* ipClient = inet_ntoa(addrClient.sin_addr);

sprintf(tempBuf,"%s said: %s\n",ipClient,recvBuf);

printf("%s",tempBuf);

gets(sendBuf);

//发送数据

sendto(svr,sendBuf,strlen(sendBuf)+1,0,(sockaddr*)&addrClient,len);

}

closesocket(svr);

WSACleanup();

}

Client:

------------------------------------------------------

#pragma comment (lib,"ws2_32.lib")

#include <Winsock2.h>

#include <stdio.h>

void main()

{

//版本协商

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );

if ( err != 0 ) {

return;

}

if ( LOBYTE( wsaData.wVersion ) != 1 ||

HIBYTE( wsaData.wVersion ) != 1 ) {

WSACleanup( );

return;

}

//创建服务器套接字

SOCKET Svr = socket(AF_INET,SOCK_DGRAM,0);

//创建地址

SOCKADDR_IN addrSvr;

addrSvr.sin_family = AF_INET;

addrSvr.sin_port = htons(6000);

addrSvr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

char recvBuf[128];

char sendBuf[128];

int len = sizeof(sockaddr);

while(true)

{

gets(sendBuf);

//发送数据

sendto(Svr,sendBuf,strlen(sendBuf)+1,0,(sockaddr*)&addrSvr,len);

//接收数据

recvfrom(Svr,recvBuf,128,0,(sockaddr*)&addrSvr,&len);

char* ipSvr = inet_ntoa(addrSvr.sin_addr);

printf("%s said: %s\n",ipSvr,recvBuf);

}

closesocket(Svr);

WSACleanup();

}

转自:http://blog.sina.com.cn/s/blog_4b6068cc0100iuf6.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: