发表于《C# 端口转发软件》
张静茹作者
11年0个月前IP:山东
800548
6楼
目前这版 效果不错,速度快很多


TcpListener TcpListene;
private void Form1_Load(object sender, EventArgs e)
{
    TcpListene = new TcpListener(IPAddress.Parse("192.168.1.101"), 8790);
    TcpListene.Start();//开始监听
    new Task(() => 
    {
        while (true)
        {
            NewClient(TcpListene.AcceptTcpClient());
        }
    }).Start();
}
long a = 0, b = 0, c = 0, d = 0, f = 0;
void NewClient(TcpClient BrowseService)//新客户端接入
{
    TcpClient AgencyClient = new TcpClient();//链接到代理服务器
    AgencyClient.Connect(IPAddress.Parse("127.0.0.1"), 8787);
    var BrowserStream = BrowseService.GetStream();
    var AgencyStream = AgencyClient.GetStream();
    a++;
    Task t1 = new Task(() => 
    {
        using (AgencyClient) using (BrowseService) using (AgencyStream) using (BrowserStream)
        {
            byte[] buffer = new byte[128];
            int count = 0;
            while (true)
            {
                try
                {
                    if ((count = BrowserStream.Read(buffer, 0, buffer.Length)) == 0) break;
                    AgencyStream.Write(buffer, 0, count); 
                } catch (Exception) { d++; break; }
                //Console.WriteLine(string.Format("Beowser -> Agency:{0}", Encoding.Default.GetString(buffer,0,count)));
            }
            b++; 
        }
    });
    t1.Start();
    Task t2 = new Task(() => 
    {
        using (AgencyClient) using (BrowseService) using (AgencyStream) using (BrowserStream)
        {
            byte[] buffer = new byte[128];
            int count = 0;
            while (true)
            {
                try
                {
                    if ((count = AgencyStream.Read(buffer, 0, buffer.Length)) == 0) break;
                    BrowserStream.Write(buffer, 0, count); 
                }
                catch (Exception) { f++; break; }
                //Console.WriteLine(string.Format("Agency -> Beowser:{0}", Encoding.Default.GetString(buffer, 0, count)));
            }
            c++; 
        }
    });
    t2.Start();
}
 
private void timer1_Tick(object sender, EventArgs e)
{
    this.Invoke(new Action(()=>{
        label1.Text = string.Format("全部创建socket:{0}个\r\n关闭了socket:{2}个\r\n现有socke:{1}个\r\nb={3}个\r\nc={4}\r\nd={5}\r\nf={6}", a, a - (b + c)/2, (b + c)/2, b, c, d, f);
    }));
}
评论
文号 / 800548

千古风流
名片专栏发私信
学术分 1
总主题 146 帖总回复 1873 楼拥有证书:进士 学者 机友 笔友
注册于 2010/12/30 03:32:26最后登录 2026/06/20 19:33:53
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:0

个人简介

暂未填写
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的