1:Server端
#include <stdio.h>
#include <Winsock2.h>
#pragma comment(lib, "ws2_32.lib") 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 sockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,
sizeof
(SOCKADDR));
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int
len=
sizeof
(SOCKADDR);
while
(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
char
sendBuf[50];
sprintf
(sendBuf,
"Welcome %s to here!"
,inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,
strlen
(sendBuf)+1,0);
char
recvBuf[50];
recv(sockConn,recvBuf,50,0);
printf
(
"%s\n"
,recvBuf);
closesocket(sockConn);
}
}
2.客户端:
#include
<
stdio.h
>
#include
<
Winsock2.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 sockClient = socket(AF_INET,SOCK_STREAM, 0 ); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = inet_addr( " 127.0.0.1 " ); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons( 6000 ); connect(sockClient,(SOCKADDR * ) & addrSrv, sizeof (SOCKADDR)); send(sockClient, " hello " ,strlen( " hello " ) + 1 , 0 ); char recvBuf[ 50 ]; recv(sockClient,recvBuf, 50 , 0 ); printf( " %s\n " ,recvBuf); closesocket(sockClient); WSACleanup(); }
第二升级: 改进支持多客户端连接; 怎么办,accpet一个连接后,立刻就起一个线程这样 针对每个客户端 启动一个线程去hold住,做接收和发送的工作 ,这样可以支持多个 客户端了
第三部分: iocp方式,要知道线程这个东西是很消耗cpu资源的, 并且线程数量是有限的,并且io也消耗资源所以需要使用iocp这种框架系统 去做!!
|