C#中的WINSOCK连接

Posted

技术标签:

【中文标题】C#中的WINSOCK连接【英文标题】:WINSOCK Connection in C# 【发布时间】:2016-05-02 05:10:54 【问题描述】:

我正在使用 Visual Studio 2015 C# Windows 应用程序。我将 winsock 连接到 c# 应用程序以从服务器获取来电数据。 在这里,我清楚地解释了我为此做了什么。

将 WINSOCK 控件连接到我的表单

右键工具箱->选择项目

代码:

using System;
using System.Windows.Forms;

namespace CLIENT

    public partial class Form1 : Form
    
        public Form1()
        
            InitializeComponent();
            this.w1.Error += new AxMSWinsockLib.DMSWinsockControlEvents_ErrorEventHandler(this.w1_Error);
            this.w1.ConnectEvent += new System.EventHandler(this.w1_ConnectEvent);
            this.w1.DataArrival += new AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEventHandler(this.w1_DataArrival);
        
        Boolean isConnected = false;

        private void w1_ConnectionRequest(object sender, AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent e)
        
            if (isConnected == true)
            
                w1.Close();
            
            w1.Accept(e.requestID);
            isConnected = true;
            DataInput.Text += "\n - Client Connected :" + w1.RemoteHostIP;
        


        private void w1_ConnectEvent(object sender, EventArgs e)
        
            DataInput.Text += "\n - Connect Event : " + w1.RemoteHostIP;
            isConnected = true;
        

        private void w1_DataArrival(object sender, AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent e)
        
            String data = "";
            Object dat = (object)data;
            w1.GetData(ref dat);
            data = (String)dat;
            DataInput.Text += "\nServer - " + w1.RemoteHostIP + " : " + data;
        

        private void w1_Error(object sender, AxMSWinsockLib.DMSWinsockControlEvents_ErrorEvent e)
        
            DataInput.Text += "\n- Error : " + e.description;
            isConnected = false;
        

        private void Connect_Click(object sender, EventArgs e)
        

            try
            
                w1.Close();
                w1.Connect(IPText.Text, PortText.Text);
            
            catch (System.Windows.Forms.AxHost.InvalidActiveXStateException g)
            
                DataInput.Text += "\n" + g.ToString();
            
        

    

我需要连接 pbx 服务器 10.0.0.68。 请帮助我为什么它没有连接?为什么它给出了一些错误?有人帮我解决我的问题。

【问题讨论】:

您是否有理由要使用该控件而不仅仅是常规 Socket? @Anjana 谢谢你提出这个问题 【参考方案1】:

问题出在服务器端,而不是客户端。

最常见的原因:

1) 服务器没有监听指定端口

2) 还有可能是防火墙的问题

检查您的服务器代码并确保它始终处于侦听模式。

很多程序员不允许服务器在启动时返回监听模式或根本不监听,这是编码中很常见的错误。

服务器应始终监听连接。当一个进来的服务器接受连接时,为该客户端打开一个新的套接字,而不是服务器的主套接字,它必须只用于侦听和建立连接,然后服务器必须返回侦听模式。

【讨论】:

数据属于那个 ip-10.0.0.68 和 port-514 的格式是什么?我的意思是日志文件或excel或表格? @Pranav Patel hii 先生,我也有同样的问题,如果你知道请帮我解决。 @Karthi 和 Anjana 这真的取决于您的 PBX 系统是什么品牌/型号(西门子、Splicecom、阿尔卡特等...) - 他们通常提供某种形式的文档/协议描述等 -例如,Splicecom 有几个协议提供不同的信息,您可以访问这些信息以实现您所描述的内容。西门子和其他公司也存在类似的情况......对于某些供应商/型号,这些接口需要另外获得许可。 所以如果没有一些有价值的信息,我帮不了你太多,是的,但如果你在逻辑上陷入困境,我会提供帮助

以上是关于C#中的WINSOCK连接的主要内容,如果未能解决你的问题,请参考以下文章

如何检查客户端是不是通过 C++ 中的 Winsock 断开连接?

丢弃用于 TCP 连接的 winsock 内部缓冲区中的排队数据

Winsock - 为啥 ZNC(和 IRC 保镖)不接受我的 winsock 连接?

关于winsock2中的connect函数

Python Winsock - 如何通过已经处于活动状态的 Winsock 连接发送数据

winsock 连接功能仅适用于高速连接