问题遇到的现象和发生背景
在做局域网通信时,只能够做到本机电脑与本机自己端口访问,不管是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();
}
}
}
}
运行结果及报错内容
如何实现在一台电脑打开服务器端口,监听别的电脑上的客户端的信息
我的解答思路和尝试过的方法
想过用数据库实现,将信息放在服务器上,在服务器上架构好网站,类似于B/S架构,浏览器可以访问网页,通过表单修改数据库内信息,虽然没有具体尝试过,但感觉是可行的,但这样的情况与这个局域网通信不太一样,虽然都用到了计算机网络的知识
我想要达到的结果
实现两台电脑间端口的监听,一台作为服务器,一台作为客户端