TCP通訊C++實現
阿新 • • 發佈:2019-01-26
TCP客戶端與伺服器端通訊模型:
伺服器端實現: #include<iostream>#include <Winsock2.h>
#pragma comment(lib,"WS2_32")
using namespace std;
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 fd,fd_client;
struct sockaddr_in addr_server,addr_client;
char buf[100]; fd=socket(AF_INET,SOCK_STREAM,0); //建立監聽套接字
addr_server.sin_family=AF_INET;
addr_server.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addr_server.sin_port=htons(6000);
bind(fd,(sockaddr *)&addr_server,sizeof(addr_server));
listen(fd,5);
int len=sizeof(sockaddr);
while(1)
{
fd_client=accept(fd,(sockaddr *)&addr_client,&len);
recv(fd_client,buf,100,0); cout<<buf<<endl; send(fd_client,"server:nihao",100,0); //傳送資料
closesocket(fd_client);
}
} 客戶端實現: #include<iostream>
#include <Winsock2.h>
#pragma comment(lib,"WS2_32")
using namespace std;
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 fd;
struct sockaddr_in addr;
char buf[100]="client:nihao"; fd=socket(AF_INET,SOCK_STREAM,0);
addr.sin_family=AF_INET;
addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addr.sin_port=htons(6000);
connect(fd,( sockaddr *)&addr,sizeof(addr));
send(fd,buf,100,0);
recv(fd,buf,100,0);
cout<<buf<<endl;
closesocket(fd);
}