正在获取请求的地址在其上下文中无效在我的聊天应用程序中

问题描述

所以我正在用C#编写一个聊天应用程序,这是一个控制台应用程序,用户可以在其中键入收件人的IPV4地址。但是问题是,当绑定IP地址时,消息将来自而不是来自本地主机的消息。

Message =所请求的地址在其上下文中无效。 Source = System.Net.Sockets

using System;
 using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
 using System.Net.Sockets;

namespace SimpleTcpSrvr
{
class Program
{
    static void Main(string[] args)
    {
        Console.OutputEncoding = Encoding.UTF8;

        int recv;

        byte[] data = new byte[1024];
        Console.WriteLine("You will need to recieve the password.txt file from your chat buddy.");
        Console.WriteLine("");
        Console.WriteLine("Please enter the IPv4 address of the buddy you are sending messages to.");
        string rip = Convert.ToString(Console.ReadLine());

        IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(rip),8080);

        Socket newsock = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

        newsock.Bind(ipep);

//这是发生错误的地方。

        newsock.Listen(10);

        Console.WriteLine("Waiting for a client...");

        Socket client = newsock.Accept();

        IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;

        Console.WriteLine("Connected with {0} at port {1}",clientep.Address,clientep.Port);

        string welcome = "Welcome to encrypted chat. Use ByteOribtPrivacyCannon to  decrypt incoming messages.";

        data = Encoding.UTF8.GetBytes(welcome);

        client.Send(data,data.Length,SocketFlags.None);

        string input;

        while (true)
        {

            data = new byte[1024];

            recv = client.Receive(data);

            if (recv == 0)

                break;

            Console.WriteLine("Client: " + Encoding.UTF8.GetString(data,recv));

            input = Console.ReadLine();

            Console.WriteLine("You: " + input);

            client.Send(Encoding.UTF8.GetBytes(input));
        }

        Console.WriteLine("Disconnected from {0}",clientep.Address);

        client.Close();

        newsock.Close();

        Console.ReadLine();

    }
}

}

为什么会这样?非常感谢。

解决方法

实际上,您的代码充当“服务器”。您需要听一个地址 您的计算机,但您正在绑定另一台主机的IP地址。

服务器只能接受连接,不能选择客户端。但是客户端可以选择服务器。 您可以尝试以下代码来解决它。

服务器:

IPEndPoint ipep = new IPEndPoint(IPAddress.Any,8080);

客户:

IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("172.xx.xx.xxx"),8080);
//172.xx.xx.xxx is the IPV4 address of your server computer

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...