我想要做一个网络server,一个网络client。
server主要就是一个echo回应,client连上服务器后打印服务器返回的回应。
Python做一个性能测试,调用50000次client去连接服务器。下面就是各自的代码。
Server:D语言开发。
Client:C/C++语言开发。
性能测试tool:Python语言开发。
Server Code: server.d -> server.exe
private import tango.core.Thread;
private import tango.io.Console;
private import tango.net.ServerSocket,
tango.net.SocketConduit;
void main()
{
const int port = 8080;
auto server = new ServerSocket (new InternetAddress(port));
while(true)
{
// wait for requests
auto request = server.accept;
// write a response
request.output.write ("server replies 'hello'");
}
}
Client Code(must link ws2_32.lib):client.cpp ->
client.exe
#include
#include
int client()
{
SOCKET sClient;
char szBuffer[1024];
sClient =
socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if (sClient == SOCKET_ERROR)
{
printf("socket() failed:
%d\n",WSAGetLastError());
return 1;
}
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(8080);
server.sin_addr.s_addr =
inet_addr("172.25.185.116");
struct hostent *host = NULL;
if(server.sin_addr.s_addr == INADDR_NONE)
{
host =
gethostbyname("172.25.185.116");
if(host == NULL)
printf("Unable
to resolve server:%s\n","172.25.185.116");
}
if(connect(sClient,(struct sockaddr
*)&server,sizeof(server)) == SOCKET_ERROR)
{
printf("connect()
failed:%d]n",WSAGetLastError());
return 1;
}
int ret = recv(sClient,szBuffer,1024,0);
szBuffer[ret] = '\0';
printf("RECV [%d
bytes]:'%s'\n",ret,szBuffer);
closesocket(sClient);
return 0;
}
int main(int argc,char* argv[])
{
WSADATA wsaData;
int retval=0;
if(WSAStartup(MAKEWORD(1,1),&wsaData)!=0)
{
return
255;
}
client();
WSACleanup();
return retval;
}
P Tool Code: test.py
import os
for i in range(50000):
os.spawnl(1,'client.exe')