bingbingyihao 2021-12-18 10:47 采纳率: 100%
浏览 71
已结题

C#局域网通信--如何打开端口让另一台电脑能够加入并访问该端口呢

问题遇到的现象和发生背景

在做局域网通信时,只能够做到本机电脑与本机自己端口访问,不管是127.0.0开头,还是192.168.1开头,打开后,都只能与监听本机端口的信息

问题相关代码,请勿粘贴截图

服务器端

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace ServerApp
{
    class SocketServer
    {
        public string _ip;
        public int _port;
        public Socket _socket;
        public byte[] buffer = new byte[1024 * 1024 * 2];

        public string listen_msg, show_msg;

        public void Start()
        {
            try
            {
                _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPAddress address = IPAddress.Parse(_ip);
                IPEndPoint endPoint = new IPEndPoint(address, _port);
                _socket.Bind(endPoint);
                _socket.Listen(int.MaxValue);
                listen_msg = "监听" + _socket.LocalEndPoint.ToString() + "消息成功";
                Thread thread = new Thread(ListenClientConnect);
                thread.Start();
            }
            catch (Exception)
            {
            }
        }

        private void ListenClientConnect()
        {
            try
            {
                while (true)
                {
                    Socket clientSocket = _socket.Accept();
                    clientSocket.Send(Encoding.UTF8.GetBytes("服务端向客户端问好\n"));
                    Thread thread = new Thread(ReceiveMessage);
                    thread.Start(clientSocket);
                }
            }
            catch (Exception) { }
        }

        private void ReceiveMessage(object socket)
        {
            Socket clientSocket = (Socket)socket;
            while (true)
            {
                try
                {
                    int length = clientSocket.Receive(buffer);
                    show_msg += string.Format("{0}", Encoding.UTF8.GetString(buffer, 0, length)) + "\n\n";
                }
                catch (Exception)
                {
                    clientSocket.Shutdown(SocketShutdown.Both);
                    clientSocket.Close();
                    break;
                }
            }
        }
    }
}


客户端

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace ClientApp
{
    class SocketClient
    {
        public string _ip;
        public int _port;
        public Socket _socket;
        public byte[] buffer = new byte[1024 * 1024 * 2];

        public string listen_msg, send_name, send_msg;        

        public void Start()
        {
            try
            {
                _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPAddress address = IPAddress.Parse(_ip);
                IPEndPoint endPoint = new IPEndPoint(address, _port);
                _socket.Connect(endPoint);

                int length = _socket.Receive(buffer);
                listen_msg = Encoding.UTF8.GetString(buffer, 0, length);

                string sendMessage = string.Format("{0}:{1}, {2}", send_name, send_msg, DateTime.Now.ToString());
                _socket.Send(Encoding.UTF8.GetBytes(sendMessage));
            }
            catch (Exception)
            {
                _socket.Close();
            }
        }
    }
}


运行结果及报错内容

img

如何实现在一台电脑打开服务器端口,监听别的电脑上的客户端的信息

我的解答思路和尝试过的方法

想过用数据库实现,将信息放在服务器上,在服务器上架构好网站,类似于B/S架构,浏览器可以访问网页,通过表单修改数据库内信息,虽然没有具体尝试过,但感觉是可行的,但这样的情况与这个局域网通信不太一样,虽然都用到了计算机网络的知识

我想要达到的结果

实现两台电脑间端口的监听,一台作为服务器,一台作为客户端

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月26日
    • 创建了问题 12月18日

    悬赏问题

    • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
    • ¥50 如何将脑的图像投影到颅骨上
    • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
    • ¥15 netcore使用PuppeteerSharp截图
    • ¥20 这张图页脚具体代码该怎么写?
    • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
    • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
    • ¥15 数字信号处理考试111
    • ¥15 allegro17.2生成bom表是空白的
    • ¥15 请问一下怎么打通CAN通讯