从服务器到客户端连续发送byte []?

OHMR

我对此很陌生,我只想从控制台服务器窗口向客户端发送一条消息。

这是我的服务器:

 static void Main(string[] args)
        {
            try
            {

                IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 8000);
                Socket newsock = new Socket(AddressFamily.InterNetwork,
                                   SocketType.Stream, ProtocolType.Tcp);
                newsock.Bind(localEndPoint);
                newsock.Listen(10);
                Socket client = newsock.Accept();

                if (client.Connected)
                {
                    Console.WriteLine("client connected.");
                }

                string msg = "Who's there?";
                byte[] buffer = new byte[msg.Count()];
                buffer = Encoding.ASCII.GetBytes(msg);
                client.Send(buffer);

当我使用上面的client.Send()时,它工作正常,但是当我按以下方式进行操作时,另一端什么也没收到。由于客户端已连接,因此我看不出它为什么会失败。

                    while (client.Connected)
                    {
                        Console.WriteLine("enter msg: ");
                        string userMsg = Console.ReadLine();
                        byte[] userBuffer = new byte[userMsg.Count()];
                        userBuffer = Encoding.ASCII.GetBytes(userMsg);
                        client.Send(userBuffer);

                        Console.ReadKey();
                    }

            }

            catch (Exception e)
            {
                Console.WriteLine("Error: " + e);
            }    
    }

这是客户端的代码:

public partial class MainWindow : Window
{

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

    IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000);

    byte[] buffer = new byte[12];


    public MainWindow()
    {
        InitializeComponent();
    }

    private void btn_Connect_Click(object sender, RoutedEventArgs e)
    {
        server = new Socket(AddressFamily.InterNetwork,
                          SocketType.Stream, ProtocolType.Tcp);
        server.Connect(ipep);

        if (server.Connected)
        {
            txt_Log.AppendText("\nConnected to target server.");
        }


        btn.IsEnabled = false;
        btn_disc.IsEnabled = true;
    }

    private void btn_Disconnect_Click(object sender, RoutedEventArgs e)
    {
        server.Close();

        if (!server.Connected)
        {
            txt_Log.AppendText("\nDisconnected to target server.");
        }
        btn.IsEnabled = true;
        btn_disc.IsEnabled = false;
    }

    private void btn_Fetch_Click(object sender, RoutedEventArgs e)
    {
        if (buffer != null)
        {
            using (server)
            {
                server.Receive(buffer);
                txt_Log.AppendText(System.Text.Encoding.Default.GetString(buffer));
                buffer = null;

            }
        }
        else
        {
            txt_Log.AppendText("\nNo data to send.");
        }
    }

}
詹姆斯·巴拉斯(James Barrass)

好吧,我已经运行了您的服务器代码。那里没有问题...

对于客户端,似乎您要配置服务器,这会断开连接吗?并使缓冲区为空,因此您也不能重复使用该缓冲区。

我写了一些测试客户端代码,看起来不错

class Program
{
    static void Main(string[] args)
    {
        Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        server.Connect("127.0.0.1", 8000);
        byte[] buffer = new byte[1024];
        while (true)
        {
            int bytes = server.Receive(buffer);
            Console.WriteLine(System.Text.Encoding.Default.GetString(buffer, 0, bytes));
        }
    }
}

请注意,您每次读取数据包时都不会断开与客户端的连接,并且如果您先对static进行null设置,然后对null进行检查,那么它将变为null,因此fetch仅工作一次,因此请不要这样做!就像Mark所说的,检查从调用Receive中读取的字节数,这样您就可以知道要解码多少个字节。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

客户端数据到服务器端

来自分类Dev

如何从客户端Web发送消息到服务器MFC应用程序?

来自分类Dev

SignalR从客户端到服务器的发送对象未正确反序列化

来自分类Dev

TCP 服务器以数据包结构发送文件(到非 Java 客户端)

来自分类Dev

从服务器向客户端发送数据

来自分类Dev

服务器无法向客户端发送消息

来自分类Dev

客户端/服务器发送大文件

来自分类Dev

服务器向客户端发送消息

来自分类Dev

向/从客户端/服务器发送对象

来自分类Dev

服务器向客户端发送消息

来自分类Dev

客户端不向服务器发送文本

来自分类Dev

从服务器向 websocket 客户端发送消息

来自分类Dev

客户端不向服务器发送数据

来自分类Dev

处理SSL客户端到服务器到客户端的最佳方法(中继?)

来自分类Dev

如何上传客户端文件到服务器?

来自分类Dev

从服务器到客户端的MVC推送通知

来自分类Dev

服务器到客户端的通信方法

来自分类Dev

Java中从客户端到服务器的通信

来自分类Dev

从服务器到客户端启动ssh连接

来自分类Dev

服务器到客户端的通信方法

来自分类Dev

将var从服务器传递到客户端

来自分类Dev

从客户端到服务器(流星)调用方法

来自分类Dev

TCP客户端到服务器损坏数据

来自分类Dev

从客户端到服务器的文件传输

来自分类Dev

NodeJS 服务器到 NodeJS 客户端通知

来自分类Dev

如何实现通过服务器(聊天)传递客户端到客户端的消息?

来自分类Dev

NodeJS:通过服务器从客户端到客户端

来自分类Dev

JAVA客户端并发修改异常通过服务器到客户端

来自分类Dev

在服务器事件中从服务器向客户端发送通知

Related 相关文章

热门标签

归档