tcp服务端为C++代码,在Windows下实现,代码如下:
// a TCP Server
#define WIN32_LEAN_AND_MEAN
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include
#include
#include
// add a static library
#pragma comment(lib,"ws2_32.lib")
int main()
{
WORD ver = MAKEWORD(2,2);
WSADATA dat;
WSAStartup(ver,&dat);
//----------------------------
// 1. build a socket
SOCKET sock = socket(AF_INET,SOCK_STREAM,0);//IPPROTO_TCP
// 2. bind a port
sockaddr_in addr = {};// address
addr.sin_family = AF_INET;
u_short port = 4567;
addr.sin_port = htons(port); // host to net short
addr.sin_addr.S_un.S_addr = INADDR_ANY;//inet_addr("127.0.0.1");
int bind_ret = bind(sock,(sockaddr*)&addr,sizeof(sockaddr_in));
if(bind_ret == SOCKET_ERROR) // check whether binding is ok.
{
//printf("Failed to bind the socket");
std::cout << " - Failed to bind the socket @" << port << std::endl;
}
// 3. listen
int listen_ret = listen(sock,5);
if(listen_ret == SOCKET_ERROR)
{
std::cout << " - Listening error" << std::endl;
}
else
{
std::cout << " - Listening & Waiting for a connection..." << std::endl;
}
// 4. accept
sockaddr_in clientAddr = {};
int nAddrLen = sizeof(sockaddr_in);
char msgBuf[] = "welcome,this is tcp_server";
while(true)
{
SOCKET conn_sock = accept(sock,(sockaddr*)&clientAddr,&nAddrLen);
if(conn_sock == INVALID_SOCKET)
{
std::cout << " - Error:Accepted a invalid client socket." << std::endl;
return -1;
}
std::cout << " - Connection from:" << inet_ntoa(clientAddr.sin_addr) << std::endl;
// 5. send data to client
send(conn_sock,msgBuf,strlen(msgBuf)+1,0);
}
// 6. close socket
closesocket(sock);
//----------------------------
WSACleanup();
return 0;
}
客户端代码,连接tcp服务器,用python实现
#tcp client
import socket
if __name__ == '__main__':
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
addr=('127.0.0.1',4567)
s.connect(addr)
s.sendall(b'client_5001')
data = s.recv(1024)
print(data.decode('utf8'))