mirror of
https://github.com/yanfeizhang/coder-kung-fu.git
synced 2026-11-03 22:33:45 +08:00
feat: add test code of 1 million tcp connection
This commit is contained in:
39
tests/network/test02/c/Makefile
Normal file
39
tests/network/test02/c/Makefile
Normal file
@@ -0,0 +1,39 @@
|
||||
CLIENT_BINARY_NAME := "test-client"
|
||||
SERVER_BINARY_NAME := "test-server"
|
||||
|
||||
.PHONY: ping
|
||||
ping:
|
||||
sh tool.sh ping
|
||||
|
||||
.PHONY: ifup
|
||||
ifup:
|
||||
sh tool.sh ifup
|
||||
|
||||
.PHONY: ifdown
|
||||
ifdown:
|
||||
sh tool.sh ifdown
|
||||
|
||||
.PHONY: build-cli
|
||||
build-cli:
|
||||
gcc client.c -o $(CLIENT_BINARY_NAME)
|
||||
|
||||
.PHONY: run-cli
|
||||
run-cli: build-cli
|
||||
sh tool.sh runcli ./$(CLIENT_BINARY_NAME)
|
||||
|
||||
.PHONY: stop-cli
|
||||
stop-cli:
|
||||
sh tool.sh stopcli ./$(CLIENT_BINARY_NAME)
|
||||
|
||||
.PHONY: build-srv
|
||||
build-srv:
|
||||
gcc server.c -o $(SERVER_BINARY_NAME)
|
||||
|
||||
.PHONY: run-srv
|
||||
run-srv: build-srv
|
||||
sh tool.sh runsrv ./$(SERVER_BINARY_NAME)
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f ${CLIENT_BINARY_NAME}
|
||||
rm -f $(SERVER_BINARY_NAME)
|
||||
85
tests/network/test02/c/client.c
Normal file
85
tests/network/test02/c/client.c
Normal file
@@ -0,0 +1,85 @@
|
||||
#include <netinet/in.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#define MAX_CONNECTION_NUM 50000
|
||||
|
||||
int buildConnect(const char *lIp, const char *sIp, int sPort)
|
||||
{
|
||||
int skFd;
|
||||
if((skFd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||
{
|
||||
printf("\n Error : Could not create socket\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct sockaddr_in cliAddr;
|
||||
cliAddr.sin_family = AF_INET;
|
||||
cliAddr.sin_addr.s_addr = inet_addr(lIp);
|
||||
cliAddr.sin_port = 0;
|
||||
if(bind(skFd, (struct sockaddr *)&cliAddr, sizeof(cliAddr)) < 0)
|
||||
{
|
||||
printf("\n Error : Bind Failed \n");
|
||||
}
|
||||
|
||||
struct sockaddr_in srvAddr;
|
||||
srvAddr.sin_family = AF_INET;
|
||||
srvAddr.sin_addr.s_addr = inet_addr(sIp);
|
||||
srvAddr.sin_port = htons(sPort);
|
||||
if(connect(skFd, (struct sockaddr *)&srvAddr, sizeof(srvAddr)) < 0)
|
||||
{
|
||||
printf("\n Error : Connect Failed \n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return skFd;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int i = 0, sPort, fd;
|
||||
char lIp[16], sIp[16];
|
||||
|
||||
if(argc != 4)
|
||||
{
|
||||
printf("\n Usage: %s <local ip> <server ip> <server port>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
//1. 从命令行获取并解析local ip、server ip以及端口
|
||||
strcpy(lIp, argv[1]);
|
||||
strcpy(sIp, argv[2]);
|
||||
sPort = atoi(argv[3]);
|
||||
|
||||
//2. 开始建立连接
|
||||
int *sockets = (int *)malloc(sizeof(int) * MAX_CONNECTION_NUM);
|
||||
for(i = 1; i <= MAX_CONNECTION_NUM; i++)
|
||||
{
|
||||
if(0 == i % 1000)
|
||||
{//稍稍停顿一下,避免把服务端的握手队列打满
|
||||
printf("%s 连接 %s:%d成功了 %d 条!\n", lIp, sIp, sPort, i);
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
fd = buildConnect(lIp, sIp, sPort);
|
||||
if(fd > 0)
|
||||
{
|
||||
sockets[i-1] = fd;
|
||||
}else{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
sleep(300);
|
||||
|
||||
//3. 释放所有的连接
|
||||
printf("关闭所有的连接...\n");
|
||||
for(i = 0; i < MAX_CONNECTION_NUM; i++)
|
||||
{
|
||||
close(sockets[i]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
55
tests/network/test02/c/server.c
Normal file
55
tests/network/test02/c/server.c
Normal file
@@ -0,0 +1,55 @@
|
||||
#include <arpa/inet.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define MAX_CONNECTION_NUM 1100000
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
char ip[16];
|
||||
int lisFd, conFd, port;
|
||||
struct sockaddr_in servAddr;
|
||||
|
||||
if(argc != 3)
|
||||
{
|
||||
printf("\n Usage: %s <server ip> <server port>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
//1. 从命令行获取并解析server ip以及端口
|
||||
strcpy(ip, argv[1]);
|
||||
port = atoi(argv[2]);
|
||||
|
||||
//2. 创建server
|
||||
if((lisFd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||
{
|
||||
printf("\n Error : Could not create socket\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
servAddr.sin_family = AF_INET;
|
||||
servAddr.sin_addr.s_addr = inet_addr(ip);
|
||||
servAddr.sin_port = htons(port);
|
||||
if(bind(lisFd, (struct sockaddr*)&servAddr, sizeof(servAddr)) < 0)
|
||||
{
|
||||
printf("\n Error : Bind Failed \n");
|
||||
}
|
||||
if((listen(lisFd, 1024)) < 0)
|
||||
{
|
||||
printf("\n Error : Listen Failed \n");
|
||||
}
|
||||
|
||||
//3. 接收连接
|
||||
int i = 0;
|
||||
int *sockets = (int *)malloc(sizeof(int) * MAX_CONNECTION_NUM);
|
||||
while(1)
|
||||
{
|
||||
conFd = accept(lisFd, (struct sockaddr*)NULL, NULL);
|
||||
if(conFd > 0)
|
||||
{
|
||||
sockets[i++] = conFd;
|
||||
printf("%s %d accept success:%d\n", ip, port, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
83
tests/network/test02/c/tool.sh
Normal file
83
tests/network/test02/c/tool.sh
Normal file
@@ -0,0 +1,83 @@
|
||||
#!/bin/bash
|
||||
|
||||
#--------------------------- begin -------------------------
|
||||
#注意:这一部分的内容需要根据你自己的实验环境来设置
|
||||
|
||||
#1.客户端 IP 列表:选择20个,且不能在局域网中存在
|
||||
# 示例
|
||||
# IPS=(
|
||||
# "192.168.1.200"
|
||||
# "192.168.1.201"
|
||||
# )
|
||||
|
||||
IPS=(
|
||||
"192.168.1.200"
|
||||
"192.168.1.201"
|
||||
)
|
||||
|
||||
#2.客户端 IP 对应的子网掩码
|
||||
#示例:
|
||||
#NETMASK="255.255.248.0"
|
||||
NETMASK="255.255.248.0"
|
||||
|
||||
#3.服务端的 IP 和 端口
|
||||
#示例
|
||||
#SERVERIP="192.168.1.100"
|
||||
#SERVERPORT="8090"
|
||||
SERVERIP="192.168.1.100"
|
||||
SERVERPORT="8090"
|
||||
#--------------------------- end -------------------------
|
||||
|
||||
TYPE=$1
|
||||
|
||||
exec_ping(){
|
||||
for i in "${!IPS[@]}"; do
|
||||
ping -c 1 -W 1 ${IPS[$i]} > /dev/null
|
||||
if [[ $? != 0 ]];then
|
||||
echo ${IPS[$i]}" false"
|
||||
else
|
||||
echo ${IPS[$i]}" true"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
exec_ifup(){
|
||||
for i in "${!IPS[@]}"; do
|
||||
echo ifconfig eth0:$i ${IPS[$i]} netmask $NETMASK up
|
||||
ifconfig eth0:$i ${IPS[$i]} netmask $NETMASK up
|
||||
done
|
||||
}
|
||||
|
||||
exec_ifdown(){
|
||||
for i in "${!IPS[@]}"; do
|
||||
echo ifconfig eth0:$i down
|
||||
ifconfig eth0:$i down
|
||||
done
|
||||
}
|
||||
|
||||
exec_runcli(){
|
||||
for i in "${!IPS[@]}"; do
|
||||
echo $CLIENT ${IPS[$i]} $SERVERIP $SERVERPORT
|
||||
$CLIENT ${IPS[$i]} $SERVERIP $SERVERPORT &
|
||||
done
|
||||
}
|
||||
|
||||
exec_stopcli(){
|
||||
ps -ef | grep $CLIENT | awk '{print $2}' | xargs kill -9 > /dev/null
|
||||
}
|
||||
|
||||
exec_runsrv(){
|
||||
echo $SERVER 0.0.0.0 $SERVERPORT
|
||||
$SERVER 0.0.0.0 $SERVERPORT
|
||||
}
|
||||
|
||||
case $TYPE in
|
||||
"ping") exec_ping;;
|
||||
"ifup") exec_ifup;;
|
||||
"ifdown") exec_ifdown;;
|
||||
"runcli") CLIENT=$2; exec_runcli;;
|
||||
"stopcli") CLIENT=$2; exec_stopcli;;
|
||||
"runsrv") SERVER=$2; exec_runsrv;;
|
||||
*) echo "get unkown type $TYPE"; exit ;;
|
||||
esac
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Socket客户端
|
||||
*/
|
||||
|
||||
require("ports.php");
|
||||
|
||||
//这里填写你的服务器ip
|
||||
$serverIp = "";
|
||||
|
||||
$cmd = "ps -ef | grep client.php | awk '{print $2}' | xargs kill -9";
|
||||
shell_exec($cmd);
|
||||
shell_exec("echo '' > clientd.log");
|
||||
|
||||
if(isset($argv[1]) && "stop"==$argv[1]){
|
||||
exit;
|
||||
}
|
||||
|
||||
foreach($ports as $port){
|
||||
$tCommand = "php client.php $serverIp $port >> clientd.log &";
|
||||
echo $tCommand."\n";
|
||||
shell_exec($tCommand);
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
56
tests/network/test02/java/Client.java
Normal file
56
tests/network/test02/java/Client.java
Normal file
@@ -0,0 +1,56 @@
|
||||
import java.net.Socket;
|
||||
import java.net.InetSocketAddress;
|
||||
|
||||
public class Client {
|
||||
|
||||
public static final int MAX_CONNECTION_NUM = 50000;
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
if(3 != args.length){
|
||||
System.out.println("Usage: java Client <local ip> <server ip> <server port>\n");
|
||||
return;
|
||||
}
|
||||
|
||||
//1. 从命令行获取并解析local ip、server ip以及端口
|
||||
String lIp = args[0];
|
||||
String sIp = args[1];
|
||||
int sPort = Integer.parseInt(args[2]);
|
||||
|
||||
//2. 开始建立连接
|
||||
//用数组将 socket 保存起来,防止连接被过早释放
|
||||
Socket[] sockets = new Socket[MAX_CONNECTION_NUM];
|
||||
for(int i = 1; i <= MAX_CONNECTION_NUM; i++){
|
||||
try {
|
||||
Socket s = new Socket();
|
||||
s.bind(new InetSocketAddress(lIp, 0));
|
||||
s.connect(new InetSocketAddress(sIp, sPort));
|
||||
|
||||
if(false == s.isConnected()){
|
||||
System.out.println(lIp + " 连接 "+sIp+":"+sPort+" 失败! ");
|
||||
return;
|
||||
}
|
||||
sockets[i-1] = s;
|
||||
|
||||
} catch (Exception e) {
|
||||
//连接失败则小憩一会儿接着连
|
||||
Thread.sleep(500);
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
//稍稍停顿一下,避免把服务端的握手队列打满
|
||||
if(0 == i % 500){
|
||||
Thread.sleep(500);
|
||||
System.out.println(lIp + " 连接 "+sIp+":"+sPort+" 成功了 "+i+" 条");
|
||||
}
|
||||
}
|
||||
|
||||
//把所有连接都 hold 一会儿,方便观察
|
||||
Thread.sleep(300 * 1000);
|
||||
|
||||
//3. 释放所有的连接
|
||||
System.out.println("关闭所有的连接...\n");
|
||||
for(int i = 0; i < MAX_CONNECTION_NUM; i++){
|
||||
sockets[i].close();
|
||||
}
|
||||
}
|
||||
}
|
||||
38
tests/network/test02/java/Makefile
Normal file
38
tests/network/test02/java/Makefile
Normal file
@@ -0,0 +1,38 @@
|
||||
CLIENT_BINARY_NAME := "java Client"
|
||||
SERVER_BINARY_NAME := "java Server"
|
||||
|
||||
.PHONY: ping
|
||||
ping:
|
||||
sh tool.sh ping
|
||||
|
||||
.PHONY: ifup
|
||||
ifup:
|
||||
sh tool.sh ifup
|
||||
|
||||
.PHONY: ifdown
|
||||
ifdown:
|
||||
sh tool.sh ifdown
|
||||
|
||||
.PHONY: build-cli
|
||||
build-cli:
|
||||
javac Client.java
|
||||
|
||||
.PHONY: run-cli
|
||||
run-cli: build-cli
|
||||
sh tool.sh runcli $(CLIENT_BINARY_NAME)
|
||||
|
||||
.PHONY: stop-cli
|
||||
stop-cli:
|
||||
sh tool.sh stopcli
|
||||
|
||||
.PHONY: build-srv
|
||||
build-srv:
|
||||
javac Server.java
|
||||
|
||||
.PHONY: run-srv
|
||||
run-srv: build-srv
|
||||
sh tool.sh runsrv $(SERVER_BINARY_NAME)
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f *.class
|
||||
41
tests/network/test02/java/Server.java
Normal file
41
tests/network/test02/java/Server.java
Normal file
@@ -0,0 +1,41 @@
|
||||
import java.io.IOException;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.net.InetSocketAddress;
|
||||
|
||||
public class Server {
|
||||
public static final int MAX_CONNECTION_NUM = 1100000;
|
||||
|
||||
public static void main(String[] args) {
|
||||
if(2 != args.length){
|
||||
System.out.println("Usage: java Server <server ip> <server port>\n");
|
||||
return;
|
||||
}
|
||||
|
||||
String sIp = args[0];
|
||||
int sPort = Integer.parseInt(args[1]);
|
||||
|
||||
//用数组将 socket 保存起来,防止连接被过早回收
|
||||
Socket[] sockets = new Socket[MAX_CONNECTION_NUM];
|
||||
|
||||
try {
|
||||
ServerSocket ss = new ServerSocket();
|
||||
ss.bind(new InetSocketAddress(sIp, sPort));
|
||||
System.out.println("启动Server " + sIp + ":" + sPort + "...");
|
||||
|
||||
int i = 0;
|
||||
while(true){
|
||||
try{
|
||||
Socket s = ss.accept();
|
||||
sockets[i] = s;
|
||||
i++;
|
||||
System.out.println("Server " + sIp + ":" + sPort + " 接收到第 " + i +" 条连接!");
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
83
tests/network/test02/java/tool.sh
Normal file
83
tests/network/test02/java/tool.sh
Normal file
@@ -0,0 +1,83 @@
|
||||
#!/bin/bash
|
||||
|
||||
#--------------------------- begin -------------------------
|
||||
#注意:这一部分的内容需要根据你自己的实验环境来设置
|
||||
|
||||
#1.客户端 IP 列表:选择20个,且不能在局域网中存在
|
||||
# 示例
|
||||
# IPS=(
|
||||
# "192.168.1.200"
|
||||
# "192.168.1.201"
|
||||
# )
|
||||
|
||||
IPS=(
|
||||
"192.168.1.200"
|
||||
"192.168.1.201"
|
||||
)
|
||||
|
||||
#2.客户端 IP 对应的子网掩码
|
||||
#示例:
|
||||
#NETMASK="255.255.248.0"
|
||||
NETMASK="255.255.248.0"
|
||||
|
||||
#3.服务端的 IP 和 端口
|
||||
#示例
|
||||
#SERVERIP="192.168.1.100"
|
||||
#SERVERPORT="8090"
|
||||
SERVERIP="192.168.1.100"
|
||||
SERVERPORT="8090"
|
||||
#--------------------------- end -------------------------
|
||||
|
||||
TYPE=$1
|
||||
|
||||
exec_ping(){
|
||||
for i in "${!IPS[@]}"; do
|
||||
ping -c 1 -W 1 ${IPS[$i]} > /dev/null
|
||||
if [[ $? != 0 ]];then
|
||||
echo ${IPS[$i]}" false"
|
||||
else
|
||||
echo ${IPS[$i]}" true"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
exec_ifup(){
|
||||
for i in "${!IPS[@]}"; do
|
||||
echo ifconfig eth0:$i ${IPS[$i]} netmask $NETMASK up
|
||||
ifconfig eth0:$i ${IPS[$i]} netmask $NETMASK up
|
||||
done
|
||||
}
|
||||
|
||||
exec_ifdown(){
|
||||
for i in "${!IPS[@]}"; do
|
||||
echo ifconfig eth0:$i down
|
||||
ifconfig eth0:$i down
|
||||
done
|
||||
}
|
||||
|
||||
exec_runcli(){
|
||||
for i in "${!IPS[@]}"; do
|
||||
echo $CLIENT ${IPS[$i]} $SERVERIP $SERVERPORT
|
||||
$CLIENT ${IPS[$i]} $SERVERIP $SERVERPORT &
|
||||
done
|
||||
}
|
||||
|
||||
exec_stopcli(){
|
||||
ps -ef | grep java | grep Client | awk '{print $2}' | xargs kill -9
|
||||
}
|
||||
|
||||
exec_runsrv(){
|
||||
echo $SERVER 0.0.0.0 $SERVERPORT
|
||||
$SERVER 0.0.0.0 $SERVERPORT
|
||||
}
|
||||
|
||||
case $TYPE in
|
||||
"ping") exec_ping;;
|
||||
"ifup") exec_ifup;;
|
||||
"ifdown") exec_ifdown;;
|
||||
"runcli") CLIENT=$2; exec_runcli;;
|
||||
"stopcli") CLIENT=$2; exec_stopcli;;
|
||||
"runsrv") SERVER=$2; exec_runsrv;;
|
||||
*) echo "get unkown type $TYPE"; exit ;;
|
||||
esac
|
||||
|
||||
23
tests/network/test02/php/Makefile
Normal file
23
tests/network/test02/php/Makefile
Normal file
@@ -0,0 +1,23 @@
|
||||
.PHONY: ping
|
||||
ping:
|
||||
sh tool.sh ping
|
||||
|
||||
.PHONY: ifup
|
||||
ifup:
|
||||
sh tool.sh ifup
|
||||
|
||||
.PHONY: ifdown
|
||||
ifdown:
|
||||
sh tool.sh ifdown
|
||||
|
||||
.PHONY: run-cli
|
||||
run-cli:
|
||||
sh tool.sh runcli
|
||||
|
||||
.PHONY: stop-cli
|
||||
stop-cli:
|
||||
sh tool.sh stopcli
|
||||
|
||||
.PHONY: run-srv
|
||||
run-srv:
|
||||
sh tool.sh runsrv
|
||||
76
tests/network/test02/php/client.php
Normal file
76
tests/network/test02/php/client.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Socket客户端
|
||||
*/
|
||||
|
||||
if(!isset($argv[1]) || !isset($argv[2]) || !isset($argv[3])){
|
||||
echo "usage: php client.php {localIp} {serverIp} {serverPort} \n";
|
||||
exit;
|
||||
}
|
||||
|
||||
$localIp = $argv[1];
|
||||
$serverIp = $argv[2];
|
||||
$serverPort = $argv[3];
|
||||
|
||||
$sockets = array();
|
||||
|
||||
function buildConnect($lIp,$sIp,$sPort,$num){
|
||||
global $sockets;
|
||||
|
||||
for($i = 1; $i <= $num; $i++){
|
||||
//稍稍停顿一下,避免把服务端的握手队列打满
|
||||
if(0 == $i % 1000){
|
||||
sleep(1);
|
||||
echo $lIp." 连接 ".$sIp.":".$sPort." 成功了 ".$i." 条\n";
|
||||
}
|
||||
|
||||
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
|
||||
if($socket == false) {
|
||||
echo "$lIp $sPort socket_create() 失败,".socket_strerror(socket_last_error($socket))."\n";
|
||||
sleep(5);
|
||||
continue;
|
||||
}
|
||||
|
||||
if(false == socket_bind($socket, $lIp)){
|
||||
echo "$lIp $sPort socket_bind() 失败,".socket_strerror(socket_last_error($socket))."\n";
|
||||
sleep(5);
|
||||
continue;
|
||||
}
|
||||
|
||||
if(false == socket_connect($socket, $sIp, $sPort)){
|
||||
echo "$lIp $sPort socket_connect() 失败,".socket_strerror(socket_last_error($socket))."\n";
|
||||
sleep(5);
|
||||
continue;
|
||||
}
|
||||
|
||||
//将 socket 保存起来,避免连接被内核释放
|
||||
$sockets[] = $socket;
|
||||
|
||||
//发送数据
|
||||
//$wmsg = "I am client\n";
|
||||
//socket_write($con, $wmsg, strlen($wmsg));
|
||||
|
||||
//接收数据
|
||||
//$rmsg = socket_read($socket, 2048);
|
||||
//echo = "收到的信息:".$rmsg."\n"; }
|
||||
}
|
||||
}
|
||||
|
||||
function closeAll(){
|
||||
global $sockets;
|
||||
foreach($sockets as $socket){
|
||||
socket_close($socket);
|
||||
}
|
||||
}
|
||||
|
||||
//开始测试
|
||||
buildConnect($localIp, $serverIp, $serverPort, 50000);
|
||||
|
||||
//连接完了 sleep 一会儿
|
||||
//这样有时间在 linux 上用 netstat、ss、slabtop 等命令进行观察
|
||||
sleep(600);
|
||||
|
||||
//关闭所有连接
|
||||
echo "close all connection now...";
|
||||
closeAll();
|
||||
105
tests/network/test02/server.php → tests/network/test02/php/server.php
Executable file → Normal file
105
tests/network/test02/server.php → tests/network/test02/php/server.php
Executable file → Normal file
@@ -1,55 +1,50 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Socket服务端
|
||||
*/
|
||||
|
||||
set_time_limit(0);
|
||||
|
||||
if(!isset($argv[1]) || !isset($argv[2])){
|
||||
echo "usage: php server.php {ip} {port}\n";
|
||||
exit;
|
||||
}
|
||||
$ip = $argv[1];
|
||||
$port = $argv[2];
|
||||
|
||||
if(($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
|
||||
echo "socket_create() 失败," . socket_strerror($sock) . "\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
if(($ret = socket_bind($sock, $ip, $port)) < 0) {
|
||||
echo "socket_bind() 失败," . socket_strerror($ret) . "\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
if(($ret = socket_listen($sock,1024)) < 0) {
|
||||
echo "socket_listen() 失败," . socket_strerror($ret) . "\n";
|
||||
exit();
|
||||
}
|
||||
echo "$ip $port listen ok!\n";
|
||||
|
||||
$sockets = array();
|
||||
$count = 0;
|
||||
do{
|
||||
//接收一个Socket连接
|
||||
$con = socket_accept($sock);
|
||||
if (false == $con) {
|
||||
echo "$ip $port socket_accept() failed: reason:".socket_strerror(socket_last_error($socket))."\n";
|
||||
continue;
|
||||
} else {
|
||||
$count++;
|
||||
if(0 == $count%1000){
|
||||
echo "$ip $port accept success: ".$count."\n";
|
||||
}
|
||||
|
||||
//发送数据
|
||||
//$wmsg = "I am server\n";
|
||||
//socket_write($con, $wmsg, strlen($wmsg));
|
||||
|
||||
//接收数据
|
||||
//$rmsg = socket_read($msgsock[$count], 2048);
|
||||
//echo = "收到的信息:".$rmsg."\n";
|
||||
}
|
||||
$sockets[$count] = $con;
|
||||
}while(true);
|
||||
<?php
|
||||
/**
|
||||
* Socket服务端
|
||||
*/
|
||||
set_time_limit(0);
|
||||
|
||||
if(!isset($argv[1]) || !isset($argv[2])){
|
||||
echo "usage: php server.php {ip} {port}\n";
|
||||
exit;
|
||||
}
|
||||
$ip = $argv[1];
|
||||
$port = $argv[2];
|
||||
|
||||
if(($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
|
||||
echo "socket_create() 失败的原因是:" . socket_strerror($sock) . "\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
if(($ret = socket_bind($sock, $ip, $port)) < 0) {
|
||||
echo "socket_bind() 失败的原因是:" . socket_strerror($ret) . "\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
if(($ret = socket_listen($sock,1024)) < 0) {
|
||||
echo "socket_listen() 失败的原因是:" . socket_strerror($ret) . "\n";
|
||||
exit();
|
||||
}
|
||||
echo "$ip $port listen ok!\n";
|
||||
|
||||
$sockets = array();
|
||||
$count = 0;
|
||||
do{
|
||||
//接收一个Socket连接
|
||||
$con = socket_accept($sock);
|
||||
if (false == $con) {
|
||||
echo "$ip $port socket_accept() failed: reason:".socket_strerror(socket_last_error($socket))."\n";
|
||||
continue;
|
||||
} else {
|
||||
echo "$ip $port accept success: ".$count++."\n";
|
||||
|
||||
//发送数据
|
||||
//$wmsg = "I am server\n";
|
||||
//socket_write($con, $wmsg, strlen($wmsg));
|
||||
|
||||
//接收数据
|
||||
//$rmsg = socket_read($msgsock[$count], 2048);
|
||||
//echo = "收到的信息:".$rmsg."\n";
|
||||
}
|
||||
$sockets[$count] = $con;
|
||||
}while(true);
|
||||
83
tests/network/test02/php/tool.sh
Normal file
83
tests/network/test02/php/tool.sh
Normal file
@@ -0,0 +1,83 @@
|
||||
#!/bin/bash
|
||||
|
||||
#--------------------------- begin -------------------------
|
||||
#注意:这一部分的内容需要根据你自己的实验环境来设置
|
||||
|
||||
#1.客户端 IP 列表:选择20个,且不能在局域网中存在
|
||||
# 示例
|
||||
# IPS=(
|
||||
# "192.168.1.200"
|
||||
# "192.168.1.201"
|
||||
# )
|
||||
|
||||
IPS=(
|
||||
"192.168.1.200"
|
||||
"192.168.1.201"
|
||||
)
|
||||
|
||||
#2.客户端 IP 对应的子网掩码
|
||||
#示例:
|
||||
#NETMASK="255.255.248.0"
|
||||
NETMASK="255.255.248.0"
|
||||
|
||||
#3.服务端的 IP 和 端口
|
||||
#示例
|
||||
#SERVERIP="192.168.1.100"
|
||||
#SERVERPORT="8090"
|
||||
SERVERIP="192.168.1.100"
|
||||
SERVERPORT="8090"
|
||||
#--------------------------- end -------------------------
|
||||
|
||||
TYPE=$1
|
||||
|
||||
exec_ping(){
|
||||
for i in "${!IPS[@]}"; do
|
||||
ping -c 1 -W 1 ${IPS[$i]} > /dev/null
|
||||
if [[ $? != 0 ]];then
|
||||
echo ${IPS[$i]}" false"
|
||||
else
|
||||
echo ${IPS[$i]}" true"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
exec_ifup(){
|
||||
for i in "${!IPS[@]}"; do
|
||||
echo ifconfig eth0:$i ${IPS[$i]} netmask $NETMASK up
|
||||
ifconfig eth0:$i ${IPS[$i]} netmask $NETMASK up
|
||||
done
|
||||
}
|
||||
|
||||
exec_ifdown(){
|
||||
for i in "${!IPS[@]}"; do
|
||||
echo ifconfig eth0:$i down
|
||||
ifconfig eth0:$i down
|
||||
done
|
||||
}
|
||||
|
||||
exec_runcli(){
|
||||
for i in "${!IPS[@]}"; do
|
||||
echo php client.php ${IPS[$i]} $SERVERIP $SERVERPORT &
|
||||
php client.php ${IPS[$i]} $SERVERIP $SERVERPORT &
|
||||
done
|
||||
}
|
||||
|
||||
exec_stopcli(){
|
||||
ps -ef | grep client.php | awk '{print $2}' | xargs kill -9
|
||||
}
|
||||
|
||||
exec_runsrv(){
|
||||
echo php server.php 0.0.0.0 $SERVERPORT
|
||||
php server.php 0.0.0.0 $SERVERPORT
|
||||
}
|
||||
|
||||
case $TYPE in
|
||||
"ping") exec_ping;;
|
||||
"ifup") exec_ifup;;
|
||||
"ifdown") exec_ifdown;;
|
||||
"runcli") exec_runcli;;
|
||||
"stopcli") exec_stopcli;;
|
||||
"runsrv") exec_runsrv;;
|
||||
*) echo "get unkown type $TYPE"; exit ;;
|
||||
esac
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
|
||||
$ports = array(
|
||||
8100,
|
||||
8101,
|
||||
8102,
|
||||
8103,
|
||||
8104,
|
||||
8105,
|
||||
8106,
|
||||
8107,
|
||||
8108,
|
||||
8109,
|
||||
8110,
|
||||
8111,
|
||||
8112,
|
||||
8113,
|
||||
8114,
|
||||
8115,
|
||||
8116,
|
||||
8117,
|
||||
8118,
|
||||
8119,
|
||||
);
|
||||
@@ -1,23 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Socket服务端
|
||||
*/
|
||||
|
||||
require("ports.php");
|
||||
|
||||
$cmd = "ps -ef | grep server.php | awk '{print $2}' | xargs kill -9";
|
||||
shell_exec($cmd);
|
||||
shell_exec("echo '' > serverd.log");
|
||||
|
||||
if(isset($argv[1]) && "stop"==$argv[1]){
|
||||
exit;
|
||||
}
|
||||
|
||||
foreach($ports as $port){
|
||||
$tCommand = "php server.php 0.0.0.0 $port >> serverd.log &";
|
||||
echo $tCommand."\n";
|
||||
shell_exec($tCommand);
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
31
tests/network/test03/c/Makefile
Normal file
31
tests/network/test03/c/Makefile
Normal file
@@ -0,0 +1,31 @@
|
||||
CLIENT_BINARY_NAME := "test-client"
|
||||
SERVER_BINARY_NAME := "test-server"
|
||||
|
||||
.PHONY: build-cli
|
||||
build-cli:
|
||||
gcc client.c -o $(CLIENT_BINARY_NAME)
|
||||
|
||||
.PHONY: run-cli
|
||||
run-cli: build-cli
|
||||
sh tool.sh runcli ./$(CLIENT_BINARY_NAME)
|
||||
|
||||
.PHONY: stop-cli
|
||||
stop-cli:
|
||||
sh tool.sh stopcli ./$(CLIENT_BINARY_NAME)
|
||||
|
||||
.PHONY: build-srv
|
||||
build-srv:
|
||||
gcc server.c -o $(SERVER_BINARY_NAME)
|
||||
|
||||
.PHONY: run-srv
|
||||
run-srv: build-srv
|
||||
sh tool.sh runsrv ./$(SERVER_BINARY_NAME)
|
||||
|
||||
.PHONY: stop-srv
|
||||
stop-srv:
|
||||
sh tool.sh stopsrv ./$(SERVER_BINARY_NAME)
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f ${CLIENT_BINARY_NAME}
|
||||
rm -f $(SERVER_BINARY_NAME)
|
||||
76
tests/network/test03/c/client.c
Normal file
76
tests/network/test03/c/client.c
Normal file
@@ -0,0 +1,76 @@
|
||||
#include <netinet/in.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
|
||||
#define MAX_CONNECTION_NUM 50000
|
||||
|
||||
int buildConnect(const char *sIp, int sPort)
|
||||
{
|
||||
int skFd;
|
||||
if((skFd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||
{
|
||||
printf("\n Error : Could not create socket\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct sockaddr_in srvAddr;
|
||||
srvAddr.sin_family = AF_INET;
|
||||
srvAddr.sin_addr.s_addr = inet_addr(sIp);
|
||||
srvAddr.sin_port = htons(sPort);
|
||||
if(connect(skFd, (struct sockaddr *)&srvAddr, sizeof(srvAddr)) < 0)
|
||||
{
|
||||
printf("\n Error : Connect Failed \n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return skFd;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int i = 0, sPort, fd;
|
||||
char sIp[16];
|
||||
|
||||
if(argc != 3)
|
||||
{
|
||||
printf("\n Usage: %s <server ip> <server port>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
//1. 从命令行获取并解析server ip以及端口
|
||||
strcpy(sIp, argv[1]);
|
||||
sPort = atoi(argv[2]);
|
||||
|
||||
//2. 开始建立连接
|
||||
int *sockets = (int *)malloc(sizeof(int) * MAX_CONNECTION_NUM);
|
||||
for(i = 1; i <= MAX_CONNECTION_NUM; i++)
|
||||
{
|
||||
if(0 == i % 1000)
|
||||
{//稍稍停顿一下,避免把服务端的握手队列打满
|
||||
printf("连接 %s:%d成功了 %d 条!\n", sIp, sPort, i);
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
fd = buildConnect(sIp, sPort);
|
||||
if(fd > 0)
|
||||
{
|
||||
sockets[i-1] = fd;
|
||||
}else{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
sleep(300);
|
||||
|
||||
//3. 释放所有的连接
|
||||
printf("关闭所有的连接...\n");
|
||||
for(i = 0; i < MAX_CONNECTION_NUM; i++)
|
||||
{
|
||||
close(sockets[i]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
55
tests/network/test03/c/server.c
Normal file
55
tests/network/test03/c/server.c
Normal file
@@ -0,0 +1,55 @@
|
||||
#include <arpa/inet.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define MAX_CONNECTION_NUM 1100000
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
char ip[16];
|
||||
int lisFd, conFd, port;
|
||||
struct sockaddr_in servAddr;
|
||||
|
||||
if(argc != 3)
|
||||
{
|
||||
printf("\n Usage: %s <server ip> <server port>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
//1. 从命令行获取并解析server ip以及端口
|
||||
strcpy(ip, argv[1]);
|
||||
port = atoi(argv[2]);
|
||||
|
||||
//2. 创建server
|
||||
if((lisFd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||
{
|
||||
printf("\n Error : Could not create socket\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
servAddr.sin_family = AF_INET;
|
||||
servAddr.sin_addr.s_addr = inet_addr(ip);
|
||||
servAddr.sin_port = htons(port);
|
||||
if(bind(lisFd, (struct sockaddr*)&servAddr, sizeof(servAddr)) < 0)
|
||||
{
|
||||
printf("\n Error : Bind Failed \n");
|
||||
}
|
||||
if((listen(lisFd, 1024)) < 0)
|
||||
{
|
||||
printf("\n Error : Listen Failed \n");
|
||||
}
|
||||
|
||||
//3. 接收连接
|
||||
int i = 0;
|
||||
int *sockets = (int*)malloc(sizeof(int) * MAX_CONNECTION_NUM);
|
||||
while(1)
|
||||
{
|
||||
conFd = accept(lisFd, (struct sockaddr*)NULL, NULL);
|
||||
if(conFd > 0)
|
||||
{
|
||||
sockets[i++] = conFd;
|
||||
printf("%s %d accept success:%d\n", ip, port, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
67
tests/network/test03/c/tool.sh
Normal file
67
tests/network/test03/c/tool.sh
Normal file
@@ -0,0 +1,67 @@
|
||||
#!/bin/bash
|
||||
|
||||
#--------------------------- begin -------------------------
|
||||
#注意:这一部分的内容需要根据你自己的实验环境来设置
|
||||
|
||||
#1.服务端的 IP
|
||||
#示例
|
||||
#SERVERIP="192.168.1.100"
|
||||
SERVERIP="192.168.1.100"
|
||||
|
||||
#2.服务端的端口
|
||||
SERVERPORTS=(
|
||||
"8100"
|
||||
"8101"
|
||||
"8102"
|
||||
"8103"
|
||||
"8104"
|
||||
"8105"
|
||||
"8106"
|
||||
"8107"
|
||||
"8108"
|
||||
"8109"
|
||||
"8110"
|
||||
"8111"
|
||||
"8112"
|
||||
"8113"
|
||||
"8114"
|
||||
"8115"
|
||||
"8116"
|
||||
"8117"
|
||||
"8118"
|
||||
"8119"
|
||||
)
|
||||
#--------------------------- end -------------------------
|
||||
|
||||
TYPE=$1
|
||||
|
||||
exec_runcli(){
|
||||
for i in "${!SERVERPORTS[@]}"; do
|
||||
echo $CLIENT $SERVERIP ${SERVERPORTS[$i]} &
|
||||
$CLIENT $SERVERIP ${SERVERPORTS[$i]} &
|
||||
done
|
||||
}
|
||||
|
||||
exec_stopcli(){
|
||||
ps -ef | grep $CLIENT | awk '{print $2}' | xargs kill -9
|
||||
}
|
||||
|
||||
exec_runsrv(){
|
||||
for i in "${!SERVERPORTS[@]}"; do
|
||||
echo $SERVER 0.0.0.0 ${SERVERPORTS[$i]} &
|
||||
$SERVER 0.0.0.0 ${SERVERPORTS[$i]} &
|
||||
done
|
||||
}
|
||||
|
||||
exec_stopsrv(){
|
||||
ps -ef | grep $SERVER | awk '{print $2}' | xargs kill -9
|
||||
}
|
||||
|
||||
case $TYPE in
|
||||
"runcli") CLIENT=$2; exec_runcli;;
|
||||
"stopcli") CLIENT=$2; exec_stopcli;;
|
||||
"runsrv") SERVER=$2; exec_runsrv;;
|
||||
"stopsrv") SERVER=$2; exec_stopsrv;;
|
||||
*) echo "get unkown type $TYPE"; exit ;;
|
||||
esac
|
||||
|
||||
53
tests/network/test03/java/Client.java
Normal file
53
tests/network/test03/java/Client.java
Normal file
@@ -0,0 +1,53 @@
|
||||
import java.net.Socket;
|
||||
import java.net.InetSocketAddress;
|
||||
|
||||
public class Client {
|
||||
public static final int MAX_CONNECTION_NUM = 50000;
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
if(2 != args.length){
|
||||
System.out.println("Usage: java Client <server ip> <server port>\n");
|
||||
return;
|
||||
}
|
||||
|
||||
//1. 从命令行获取并解析local ip、server ip以及端口
|
||||
String sIp = args[0];
|
||||
int sPort = Integer.parseInt(args[1]);
|
||||
|
||||
//2. 开始建立连接
|
||||
//用数组将 socket 保存起来,防止连接被过早释放
|
||||
Socket[] sockets = new Socket[MAX_CONNECTION_NUM];
|
||||
for(int i = 1; i <= MAX_CONNECTION_NUM; i++){
|
||||
try {
|
||||
Socket s = new Socket();
|
||||
s.connect(new InetSocketAddress(sIp, sPort));
|
||||
|
||||
if(false == s.isConnected()){
|
||||
System.out.println(" 连接 "+sIp+":"+sPort+" 失败! ");
|
||||
return;
|
||||
}
|
||||
sockets[i-1] = s;
|
||||
|
||||
} catch (Exception e) {
|
||||
//连接失败则小憩一会儿接着连
|
||||
Thread.sleep(500);
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
//稍稍停顿一下,避免把服务端的握手队列打满
|
||||
if(0 == i % 500){
|
||||
Thread.sleep(500);
|
||||
System.out.println("连接 "+sIp+":"+sPort+" 成功了 "+i+" 条");
|
||||
}
|
||||
}
|
||||
|
||||
//把所有连接都 hold 一会儿,方便观察
|
||||
Thread.sleep(300 * 1000);
|
||||
|
||||
//3. 释放所有的连接
|
||||
System.out.println("关闭所有的连接...\n");
|
||||
for(int i = 0; i < MAX_CONNECTION_NUM; i++){
|
||||
sockets[i].close();
|
||||
}
|
||||
}
|
||||
}
|
||||
30
tests/network/test03/java/Makefile
Normal file
30
tests/network/test03/java/Makefile
Normal file
@@ -0,0 +1,30 @@
|
||||
CLIENT_BINARY_NAME := "java Client"
|
||||
SERVER_BINARY_NAME := "java Server"
|
||||
|
||||
.PHONY: build-cli
|
||||
build-cli:
|
||||
javac Client.java
|
||||
|
||||
.PHONY: run-cli
|
||||
run-cli: build-cli
|
||||
sh tool.sh runcli $(CLIENT_BINARY_NAME)
|
||||
|
||||
.PHONY: stop-cli
|
||||
stop-cli:
|
||||
sh tool.sh stopcli
|
||||
|
||||
.PHONY: build-srv
|
||||
build-srv:
|
||||
javac Server.java
|
||||
|
||||
.PHONY: run-srv
|
||||
run-srv: build-srv
|
||||
sh tool.sh runsrv $(SERVER_BINARY_NAME)
|
||||
|
||||
.PHONY: stop-srv
|
||||
stop-srv:
|
||||
sh tool.sh stopsrv
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f *.class
|
||||
42
tests/network/test03/java/Server.java
Normal file
42
tests/network/test03/java/Server.java
Normal file
@@ -0,0 +1,42 @@
|
||||
import java.io.IOException;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.net.InetSocketAddress;
|
||||
|
||||
public class Server {
|
||||
|
||||
public static final int MAX_CONNECTION_NUM = 1100000;
|
||||
|
||||
public static void main(String[] args) {
|
||||
if(2 != args.length){
|
||||
System.out.println("Usage: java Server <server ip> <server port>\n");
|
||||
return;
|
||||
}
|
||||
|
||||
String sIp = args[0];
|
||||
int sPort = Integer.parseInt(args[1]);
|
||||
|
||||
//用数组将 socket 保存起来,防止连接被过早回收
|
||||
Socket[] sockets = new Socket[MAX_CONNECTION_NUM];
|
||||
|
||||
try {
|
||||
ServerSocket ss = new ServerSocket();
|
||||
ss.bind(new InetSocketAddress(sIp, sPort));
|
||||
System.out.println("启动Server " + sIp + ":" + sPort + "...");
|
||||
|
||||
int i = 0;
|
||||
while(true){
|
||||
try{
|
||||
Socket s = ss.accept();
|
||||
sockets[i] = s;
|
||||
i++;
|
||||
System.out.println("Server " + sIp + ":" + sPort + " 接收到第 " + i +" 条连接!");
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
67
tests/network/test03/java/tool.sh
Normal file
67
tests/network/test03/java/tool.sh
Normal file
@@ -0,0 +1,67 @@
|
||||
#!/bin/bash
|
||||
|
||||
#--------------------------- begin -------------------------
|
||||
#注意:这一部分的内容需要根据你自己的实验环境来设置
|
||||
|
||||
#1.服务端的 IP
|
||||
#示例
|
||||
#SERVERIP="192.168.1.100"
|
||||
SERVERIP="192.168.1.100"
|
||||
|
||||
#2.服务端的端口
|
||||
SERVERPORTS=(
|
||||
"8100"
|
||||
"8101"
|
||||
"8102"
|
||||
"8103"
|
||||
"8104"
|
||||
"8105"
|
||||
"8106"
|
||||
"8107"
|
||||
"8108"
|
||||
"8109"
|
||||
"8110"
|
||||
"8111"
|
||||
"8112"
|
||||
"8113"
|
||||
"8114"
|
||||
"8115"
|
||||
"8116"
|
||||
"8117"
|
||||
"8118"
|
||||
"8119"
|
||||
)
|
||||
#--------------------------- end -------------------------
|
||||
|
||||
TYPE=$1
|
||||
|
||||
exec_runcli(){
|
||||
for i in "${!SERVERPORTS[@]}"; do
|
||||
echo $CLIENT $SERVERIP ${SERVERPORTS[$i]} &
|
||||
$CLIENT $SERVERIP ${SERVERPORTS[$i]} &
|
||||
done
|
||||
}
|
||||
|
||||
exec_stopcli(){
|
||||
ps -ef | grep java | grep Client | awk '{print $2}' | xargs kill -9
|
||||
}
|
||||
|
||||
exec_runsrv(){
|
||||
for i in "${!SERVERPORTS[@]}"; do
|
||||
echo $SERVER 0.0.0.0 ${SERVERPORTS[$i]} &
|
||||
$SERVER 0.0.0.0 ${SERVERPORTS[$i]} &
|
||||
done
|
||||
}
|
||||
|
||||
exec_stopsrv(){
|
||||
ps -ef | grep java | grep Server | awk '{print $2}' | xargs kill -9
|
||||
}
|
||||
|
||||
case $TYPE in
|
||||
"runcli") CLIENT=$2; exec_runcli;;
|
||||
"stopcli") exec_stopcli;;
|
||||
"runsrv") SERVER=$2; exec_runsrv;;
|
||||
"stopsrv") exec_stopsrv;;
|
||||
*) echo "get unkown type $TYPE"; exit ;;
|
||||
esac
|
||||
|
||||
15
tests/network/test03/php/Makefile
Normal file
15
tests/network/test03/php/Makefile
Normal file
@@ -0,0 +1,15 @@
|
||||
.PHONY: run-cli
|
||||
run-cli:
|
||||
sh tool.sh runcli
|
||||
|
||||
.PHONY: stop-cli
|
||||
stop-cli:
|
||||
sh tool.sh stopcli
|
||||
|
||||
.PHONY: run-srv
|
||||
run-srv:
|
||||
sh tool.sh runsrv
|
||||
|
||||
.PHONY: stop-srv
|
||||
stop-srv:
|
||||
sh tool.sh stopsrv
|
||||
6
tests/network/test02/client.php → tests/network/test03/php/client.php
Executable file → Normal file
6
tests/network/test02/client.php → tests/network/test03/php/client.php
Executable file → Normal file
@@ -16,9 +16,9 @@ $sockets = array();
|
||||
function buildConnect($sIp,$sPort,$num){
|
||||
global $sockets;
|
||||
|
||||
for($i=0;$i<$num;$i++){
|
||||
if(0==$i%1000){
|
||||
echo $i."\n";
|
||||
for($i = 1; $i <= $num; $i++){
|
||||
if(0 == $i % 1000){
|
||||
echo " 连接 ".$sIp.":".$sPort." 成功了 ".$i." 条\n";
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
50
tests/network/test03/php/server.php
Normal file
50
tests/network/test03/php/server.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/**
|
||||
* Socket服务端
|
||||
*/
|
||||
set_time_limit(0);
|
||||
|
||||
if(!isset($argv[1]) || !isset($argv[2])){
|
||||
echo "usage: php server.php {ip} {port}\n";
|
||||
exit;
|
||||
}
|
||||
$ip = $argv[1];
|
||||
$port = $argv[2];
|
||||
|
||||
if(($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
|
||||
echo "socket_create() 失败的原因是:" . socket_strerror($sock) . "\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
if(($ret = socket_bind($sock, $ip, $port)) < 0) {
|
||||
echo "socket_bind() 失败的原因是:" . socket_strerror($ret) . "\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
if(($ret = socket_listen($sock,1024)) < 0) {
|
||||
echo "socket_listen() 失败的原因是:" . socket_strerror($ret) . "\n";
|
||||
exit();
|
||||
}
|
||||
echo "$ip $port listen ok!\n";
|
||||
|
||||
$sockets = array();
|
||||
$count = 0;
|
||||
do{
|
||||
//接收一个Socket连接
|
||||
$con = socket_accept($sock);
|
||||
if (false == $con) {
|
||||
echo "$ip $port socket_accept() failed: reason:".socket_strerror(socket_last_error($socket))."\n";
|
||||
continue;
|
||||
} else {
|
||||
echo "$ip $port accept success: ".$count++."\n";
|
||||
|
||||
//发送数据
|
||||
//$wmsg = "I am server\n";
|
||||
//socket_write($con, $wmsg, strlen($wmsg));
|
||||
|
||||
//接收数据
|
||||
//$rmsg = socket_read($msgsock[$count], 2048);
|
||||
//echo = "收到的信息:".$rmsg."\n";
|
||||
}
|
||||
$sockets[$count] = $con;
|
||||
}while(true);
|
||||
67
tests/network/test03/php/tool.sh
Normal file
67
tests/network/test03/php/tool.sh
Normal file
@@ -0,0 +1,67 @@
|
||||
#!/bin/bash
|
||||
|
||||
#--------------------------- begin -------------------------
|
||||
#注意:这一部分的内容需要根据你自己的实验环境来设置
|
||||
|
||||
#1.服务端的 IP
|
||||
#示例
|
||||
#SERVERIP="192.168.1.100"
|
||||
SERVERIP="192.168.1.100"
|
||||
|
||||
#2.服务端的端口
|
||||
SERVERPORTS=(
|
||||
"8100"
|
||||
"8101"
|
||||
"8102"
|
||||
"8103"
|
||||
"8104"
|
||||
"8105"
|
||||
"8106"
|
||||
"8107"
|
||||
"8108"
|
||||
"8109"
|
||||
"8110"
|
||||
"8111"
|
||||
"8112"
|
||||
"8113"
|
||||
"8114"
|
||||
"8115"
|
||||
"8116"
|
||||
"8117"
|
||||
"8118"
|
||||
"8119"
|
||||
)
|
||||
#--------------------------- end -------------------------
|
||||
|
||||
TYPE=$1
|
||||
|
||||
exec_runcli(){
|
||||
for i in "${!SERVERPORTS[@]}"; do
|
||||
echo php client.php $SERVERIP ${SERVERPORTS[$i]} &
|
||||
php client.php $SERVERIP ${SERVERPORTS[$i]} &
|
||||
done
|
||||
}
|
||||
|
||||
exec_stopcli(){
|
||||
ps -ef | grep client.php | awk '{print $2}' | xargs kill -9
|
||||
}
|
||||
|
||||
exec_runsrv(){
|
||||
for i in "${!SERVERPORTS[@]}"; do
|
||||
echo php server.php 0.0.0.0 ${SERVERPORTS[$i]} &
|
||||
php server.php 0.0.0.0 ${SERVERPORTS[$i]} &
|
||||
done
|
||||
}
|
||||
|
||||
exec_stopsrv(){
|
||||
ps -ef | grep server.php | awk '{print $2}' | xargs kill -9
|
||||
}
|
||||
|
||||
case $TYPE in
|
||||
"runcli") exec_runcli;;
|
||||
"stopcli") exec_stopcli;;
|
||||
"runsrv") exec_runsrv;;
|
||||
"stopsrv") exec_stopsrv;;
|
||||
*) echo "get unkown type $TYPE"; exit ;;
|
||||
esac
|
||||
|
||||
Reference in New Issue
Block a user