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

网络通信之TCP

2016-08-26 17:18 162 查看

TCP服务端程序

#include <Winsock2.h>
//包含了有关socket的函数,还需要连接ws2_32.lib
#include <stdio.h>
#pragma comment(lib,"Ws2_32.lib")
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
//socket的版本号
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);//PF_INET也行,TCP方式
//绑定之前,需要一个地址结构体
SOCKADDR_IN addrSrv;
//从unsigned long 到 网络字节序
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
//从unsigned short到网络字节序
addrSrv.sin_port=htons(6000);
//绑定   绑定到本地地址和端口上
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//监听模式
listen(sockSrv,5);//等待连接的客户数最大是5
//客户端的地址
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);//地址的长度
//接受来自客户端的连接请求
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
while(1)
{
Sleep(1000);
char sendBuf[100];
//返回点分十进制格式的地址inet_ntoa(addrClient.sin_addr)
sprintf(sendBuf,"Welcome %s to http://www.sunxin.org", inet_ntoa(addrClient.sin_addr));
//发送给客户端
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
//从客户端接受信息
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
//关闭来自客户端的请求
closesocket(sockConn);
}
}


TCP客户端程序

#include <Winsock2.h>
#include <stdio.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 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));
while(1)
{
Sleep(1000);
char recvBuf[100];
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
send(sockClient,"This is lisi",strlen("This is lisi")+1,0);
}

//关闭套接字
closesocket(sockClient);
//种植对套接字库的使用
WSACleanup();
system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网络通信 socket TCP