首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >linux上的TCP代理错误

linux上的TCP代理错误
EN

Stack Overflow用户
提问于 2014-04-13 16:31:24
回答 2查看 111关注 0票数 0

我试图在Linux服务器上运行一个内部代理,它是用C#编写的,我使用Mono来运行它。它在Windows 7上运行非常好,但是当我试图在Linux上运行它时,它会抛出一个异常;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object
  at WorldSvrListener.Server.ListenForClients () [0x00000] in <filename unknown>:0
  at System.Threading.Thread.StartInternal () [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
  at WorldSvrListener.Server.ListenForClients () [0x00000] in <filename unknown>:0
  at System.Threading.Thread.StartInternal () [0x00000] in <filename unknown>:0

我还没有完整地写完这门课,大部分都是来自谷歌,我主要研究和编辑了它,但是我对类和对象的经验还不够丰富。

这是密码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Text;
using System.Net.Sockets;
using System.Threading;
using System.Net;

namespace SvrListener
{
    class Server
    {
        static void Main()
        { 
            Server server = new Server();
            server.tcpListener.Start();
        }
        private TcpListener tcpListener;
        private Thread listenThread;

        public Server()
        {
            this.tcpListener = new TcpListener(IPAddress.Any, 32666);
            this.listenThread = new Thread(new ThreadStart(ListenForClients));
            this.listenThread.Start();
        }
        private void ListenForClients()
        {
            try
            {
                Console.WriteLine("Try and listen to:" + tcpListener.Server.LocalEndPoint.ToString());
                this.tcpListener.Start();
                Console.WriteLine("Waiting for connection...");
            }
            catch (SocketException e) { Console.WriteLine("Error:" +e.ErrorCode + " "+ e.Message); }
            while (true)
            {
                //blocks until a client has connected to the server
                TcpClient client = this.tcpListener.AcceptTcpClient();
                //create a thread to handle communication 
                //with connected client
                Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
                clientThread.Start(client);
            }
        }
        private void HandleClientComm(object client)
        {
            TcpClient tcpClient = (TcpClient)client;
            NetworkStream clientStream = tcpClient.GetStream();

            byte[] message = new byte[1024];
            int bytesRead;

            while (true)
            {
                bytesRead = 0;

                try
                {
                    //blocks until a client sends a message
                    bytesRead = clientStream.Read(message, 0, message.Length);
                }
                catch
                {
                    //a socket error has occured
                    break;
                }

                if (bytesRead == 0)
                {
                    //the client has disconnected from the server
                    break;
                }

                //message has successfully been received
                ASCIIEncoding encoder = new ASCIIEncoding();
                string s = message.Length.ToString();
                Console.WriteLine(s);
                Console.WriteLine(encoder.GetString(message, 0, bytesRead));


                Thread forwardThread = new Thread(new ParameterizedThreadStart(forwardPacket));
                forwardThread.Start(message);
            }

            tcpClient.Close();
         }
        private void forwardPacket(object message)
        {
            TcpClient client = new TcpClient();
            byte[] buffer = (byte[])message;
            IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.50"), 24585);

            client.Connect(serverEndPoint);

            NetworkStream clientStream = client.GetStream();
            ASCIIEncoding encoder = new ASCIIEncoding();
            string shit = encoder.GetString(buffer);
            byte[] nBuffer = encoder.GetBytes(shit);

            clientStream.Write(nBuffer, 0, nBuffer.Length);
            clientStream.Flush();
     }
}
}

更新:所以我尝试了--调试命令,它没有给我任何有用的东西;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object
  at WorldSvrListener.Server.ListenForClients () [0x00000] in <filename unknown>:0
  at System.Threading.Thread.StartInternal () [0x00016] in /usr/src/mono-3.0.7/mcs/class/corlib/System.Threading/Thread.cs:734
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-13 16:45:33

嗯,为了启动(),在Main()和ListenForClients()中调用两次,尝试删除Main()中的那个。

我在linux中使用了mono来创建一些服务器,而且我必须告诉您,我在TcpListener上遇到了很多麻烦(但至少在四年前……),所以最终使用了一个纯套接字实现,它运行得非常完美。

票数 2
EN

Stack Overflow用户

发布于 2014-04-13 16:42:36

根据现有的信息,我的猜测是,它将在这条线上消亡,因为没有任何其他信息被打印出来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Console.WriteLine("Try and listen to:" + tcpListener.Server.LocalEndPoint.ToString());

MSDN上的文档并没有真正说明Socket.LocalEndPoint何时或是否可以返回null,但我认为返回未绑定套接字的null是有意义的。在Mono的实现中,在调用TcpListener.Start之前,套接字也可能不会绑定。

尝试在Start()调用之后移动这一行,看看它是否使事情不是空的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23050154

复制
相关文章
asp.net中显示DataGrid控件列序号的几种方法
在aps.net中多数据绑定的控件很多,论功能来说,应该属DataGrid最为齐全,但它没有提供现成的显示记录序号的功能,不过我们可以通过它所带的一些参数来间接得到序号,下面来看看怎样得到和显示序号值计算方式如下:
Java架构师必看
2021/03/22
1.6K0
PHP错误提示open_basedir restriction in effect的解决方案
前几天收到一个网友反馈,出现了一个错误提示“open_basedir restriction in effect. File(/opt/rasp_php70/logs/alarm/alarm.log.2022-01-01) is not within the allowed path(s)”,看过之后一头雾水,没遇到过,今天做zblog搜索伪静态的时候突然想起来这个错误了,是的,十天了,我才想起来,没办法啊记性不好。百度了一下,应该是宝塔“防跨站攻击(open_basedir)”引起的错误,一般来说是Apache环境引起的。
李洋博客
2022/01/18
8.6K0
PHP错误提示open_basedir restriction in effect的解决方案
随机日志:两列显示
  看到别人的随机日志都是现实两列,我这一直显示一列,一是因为显示一列不好看,二是提供的信息量太低。因此改成两列还是很有必要的,于是自己写了些css样式,添加到主题的style.css文件的最下面。
the5fire
2019/02/28
9690
点击显示错误
双折线点击一个,另一显示a b 错误.PNG 正确.PNG 隐藏一条线 tooltip: { // 气泡 trigger: "axis"
用户4344670
2019/08/28
1.2K0
点击显示错误
在Ubuntu中配置ASP.NET站点
mono是.NET在Linux等非Windows平台上的第三方实现,借助它就可以实现.NET的跨平台应用。虽然mono还不能支持所有的.NET应用,但对于普通的小型程序,mono已经足够胜任了。更让人鼓舞的是当前最为流行的桌面Linux系统Ubuntu已经集成了mono的运行环境,只要手上有一个.net应用程序,拷贝到Ubuntu中,然后就可以运行了。实际上,在Ubuntu中,已经有一些应用程序是用C#完成的,例如附件中的便签程序Tomboy就是用C#写的,打开Tomboy的文件目录,就会发现很多在Windows中常见的dll程序集,所以,跨平台也不是不可以的。
用户1685462
2021/07/28
1.7K0
Ext根据条件显示隐藏列
  写在ExtonReady函数里面,并在表格成功渲染之后,可以添加判断是否隐藏或者显示某一列
河岸飞流
2019/08/09
2.7K0
IIS发布站点错误收集
转载:http://www.cnblogs.com/hangwei/p/4249406.html
跟着阿笨一起玩NET
2018/09/20
1.6K0
IIS发布站点错误收集
FineUI Grid 缓存列显示隐藏状态
当列表字段过多时,需要隐藏掉一些,但是再次打开页面又显示出来了,FineUI没有提供缓存功能,那么自己动手,打开【ext-part2.js】找到
冰封一夏
2019/09/11
8150
「R」显示英文错误
中文使用 R 经常看到各种乱码文字,让人看不懂意思,特别是在 Windows 系统上。
王诗翔呀
2020/07/02
1.8K0
安装SSL检查提示“错误: 服务器缺少中间证书”
首先检测下证书是不是中间证书缺失,以下两个网站都可以检测。 https://www.ssllabs.com/ssltest/index.html https://www.myssl.cn/tools/
咻一咻
2020/05/29
4.2K0
调查显示编程语言 Ruby 在缓慢衰落,缺少爆发点
Ruby 虽然仍然是 Engine Yard 和 Heroku 等产品的核心,以及 Discourse、Homebrew 和 Vagrant 等项目背后的语言,但你知道吗?Ruby 的走势并不乐观。 Redmonk 近日针对 Ruby 的发展做了一些总结,在其最近的排名中,Ruby 位居第八,落后于 JavaScript、Python 和 PHP 等语言,但领先于 C、Swift 和 Go 。尽管排名不低,但第八名其实是 Ruby 在 redmonk 排名中排名最差的一次。自2012年以来,该语言的排名
企鹅号小编
2018/02/08
1.2K0
调查显示编程语言 Ruby 在缓慢衰落,缺少爆发点
出现“内部错误,无法显示”
This page contains the following errors: error on line 2 at column 6: XML declaration allowed only at the start of the document Below is a rendering of the page up to the first error. 提示信息是头部有错误,我登录后台查看我修改过的页面,然后找到home.php我看了十几分钟没有发现那里有错误~~ 莫非头部不能有空格? 去掉试试
苦咖啡
2018/05/07
3.2K0
linux python 中文显示错误
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 20-25: ordinal not in range(128)
py3study
2020/01/07
5.4K0
DataGridView 密码列(显示为*号)的设置
曾经为在DataGridView中设置密码列(显示为*号)而发愁,如何把Windows 窗体 DataGridView 的某一列的数据显示为“*”。
Java架构师必看
2021/03/22
2.3K0
gridview列 数字、货币和日期 显示格式
在设置gridview等数据绑定控件的模版列时,总要设置显示的格式,这里是我查询一些资料后统计出来的。
Java架构师必看
2021/03/22
1.3K0
如何设置Element表格显示或者隐藏列
Element 表格点击复选框显示或隐藏列,效果如下: 主要步骤: 一、渲染复选框 <el-checkbox-group v-model="checkboxVal"> <el-ch
tianyawhl
2020/10/14
6.1K0
Winforms Cefsharp应用通过Vs Installer安装,应用崩溃,缺少文件错误
          本文主要分析winforms cefsharp应用通过Vs Installer做成安装包后,安装程序后,启动程序导致应用崩溃,提示System.IO.FileNotFoundException
郑小超.
2022/12/21
9020
Element Table 动态生成列并且不同的列显示不同的样式
我们在使用表格控件时,经常需要动态生成表格的列,并且某些列要求特殊的样式(如右对齐)
tianyawhl
2020/02/25
5.3K0
在ASP.NET 2.0中建立站点导航层次
站点导航提供程序--ASP.NET 2.0中的站点导航提供程序暴露了应用程序中的页面的导航信息,它允许你单独地定义站点的结构,而不用考虑页面的实际物理布局。默认的站点导航提供程序是基于XML的,但是你也可以通过编写自定义的提供程序,从任何后端位置暴露这些信息。
Java架构师必看
2021/03/22
7.1K0
点击加载更多

相似问题

错误"open_basedir restriction in effect“

12

get_extra_restriction()缺少一个必需的位置参数:'related_alias‘错误django

210

NHIbernate: Restriction.In和Restriction.InG之间的区别

20

内部托管Nuget站点上缺少类型错误

13

Asp.net图多列显示错误数据

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文