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

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日

    悬赏问题

    • ¥20 Html备忘录页面制作
    • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
    • ¥20 数学建模来解决我这个问题
    • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
    • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
    • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
    • ¥30 NIRfast软件使用指导
    • ¥20 matlab仿真问题,求功率谱密度
    • ¥15 求micropython modbus-RTU 从机的代码或库?
    • ¥15 django5安装失败