C#中的套接字是连续的 [英] Socket in C# continuous

查看:49
本文介绍了C#中的套接字是连续的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个客户端(A,B)和1个服务器(C).A或B如何连续连接到C.当第一个请求到服务器时,无需连接到仍然正在进行的通信使用Server.C命令了解什么是A或B将响应,客户端连接在客户端关闭连接并且服务器仍然正常运行时终止。



 使用 System.IO; 
使用 System.Net;
使用 System.Net.Sockets;
使用 System.Collections;
使用 System.Windows.Forms;
命名空间示例
{
// 服务器A
ExampleS
{
私人 IPEndPoint _ipEndPoint;
private Socket _socket;
private Socket _aSocket;
private NetworkStream _network;
private StreamReader _streamReader;
private StreamWriter _streamWriter;
void StartServer()
{
_ipEndPoint = new IPEndPoint( IPAddress.Parse( 127.0.0.1), 2009 );
_socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
_socket.Bind(_ipEndPoint);
_socket.Listen( 1000000000 );

while true
{
_asocket = _socket.Accept();
_network = new NetworkStream(_aSocket);
_streamReader = new StreamReader(_network);
_streamWriter = new StreamWriter(_network);
if (_socket.Connected) continue ;
string _messenger = _streamReader.ReadLine();
if (_messenger.Equals( X1 ))
{
_streamWriter.WriteLine( Hello);
_streamWriter.Flush();
}
else
{
_streamWriter.WriteLine( 再见);
_streamWriter.Flush();
}
}
}
}

// 客户B
ExampleCB
{
私有 IPEndPoint _ipEndPoint;
private Socket _socket;
private NetworkStream _network;
private StreamWriter _streamWriter;
private StreamReader _streamReader;
void StartClient()
{
_ipEndPoint = new IPEndPoint( Dns.Resolve(Dns.GetHostName())。AddressList [ 0 ], 2009 );
_socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
_socket.Connect(_ipEndPoint);
if (!_socket.Connected)
{
return ;
}
_network = new NetworkStream(_socket);
_streamWriter = new StreamWriter(_network);
_streamReader = new StreamReader(_network);
_streamWriter.WriteLine( X1);

_streamWriter.Flush();
var readLine = _streamReader.ReadLine();
if (readLine == null
{
MessageBox。显示( 错误信使);
return ;
}
else
{
MessageBox.Show(readLine.ToString());
}
_streamWriter.Close();
_streamReader.Close();
_network.Close();
}
}
// 客户C
class ExampleCC
{
private IPEndPoint _ipEndPoint;
private Socket _socket;
private NetworkStream _network;
private StreamWriter _streamWriter;
private StreamReader _streamReader;
void StartClient()
{
_ipEndPoint = new IPEndPoint( Dns.Resolve(Dns.GetHostName())。AddressList [ 0 ], 2009 );
_socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
_socket.Connect(_ipEndPoint);
if (!_socket.Connected)
{
return ;
}
_network = new NetworkStream(_socket);
_streamWriter = new StreamWriter(_network);
_streamReader = new StreamReader(_network);
_streamWriter.WriteLine( X1);

_streamWriter.Flush();
var readLine = _streamReader.ReadLine();
if (readLine == null
{
MessageBox。显示( 错误信使);
return ;
}
else
{
MessageBox.Show(readLine.ToString());
}
_streamWriter.Close();
_streamReader.Close();
_network.Close();
}
}
}



每次向服务器发出请求时,我都必须重新连接。现在如何不创建保留的连接与服务器和服务器的会话响应正确的客户端正在发送请求。

----

图像示例这里[ ^ ] >

解决方案
请参见我过去的答案:来自同一

Multple客户端口号 [ ^ ],

在套接字编程 [ ^ ]。



-SA

I have two clients (A, B) and 1 Server (C).How do A or B continuously connected to C.When the first request to the server, no need to connect to that still ongoing and communicate with Server.C order to understand what is A or B will respond and client connection is terminated when the client closes the connection and server is still running normally.

using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Collections;
using System.Windows.Forms;
namespace example
{
// Server A
    class ExampleS
    {
        private IPEndPoint _ipEndPoint;
        private Socket _socket;
        private Socket _aSocket;
        private NetworkStream _network;
        private StreamReader _streamReader;
        private StreamWriter _streamWriter;
        void StartServer()
        {
            _ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2009);
            _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            _socket.Bind(_ipEndPoint);
            _socket.Listen(1000000000);

            while (true)
            {
                _aSocket = _socket.Accept();
                _network = new NetworkStream(_aSocket);
                _streamReader = new StreamReader(_network);
                _streamWriter = new StreamWriter(_network);
                if (_socket.Connected) continue;
                string _messenger = _streamReader.ReadLine();
                if (_messenger.Equals("X1"))
                {
                    _streamWriter.WriteLine("Hello");
                    _streamWriter.Flush();
                }
                else
                {
                    _streamWriter.WriteLine("Goodbye");
                    _streamWriter.Flush();
                }
            }
        }
    }

// Client B
    class ExampleCB
    {
        private IPEndPoint _ipEndPoint;
        private Socket _socket;
        private NetworkStream _network;
        private StreamWriter _streamWriter;
        private StreamReader _streamReader;
        void StartClient()
        {
            _ipEndPoint = new IPEndPoint(Dns.Resolve(Dns.GetHostName()).AddressList[0],2009);
            _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            _socket.Connect(_ipEndPoint);
            if (!_socket.Connected)
            {
                 return;
            }
            _network = new NetworkStream(_socket);
            _streamWriter = new StreamWriter(_network);
            _streamReader = new StreamReader(_network);
            _streamWriter.WriteLine("X1");

            _streamWriter.Flush();
            var readLine = _streamReader.ReadLine();
            if (readLine == null)
            {
                MessageBox.Show("Error messenger");
                return;
            }
            else
            {
                MessageBox.Show(readLine.ToString());
            }
            _streamWriter.Close();
            _streamReader.Close();
            _network.Close();
        }
    }
// Client C
 class ExampleCC
    {
        private IPEndPoint _ipEndPoint;
        private Socket _socket;
        private NetworkStream _network;
        private StreamWriter _streamWriter;
        private StreamReader _streamReader;
        void StartClient()
        {
            _ipEndPoint = new IPEndPoint(Dns.Resolve(Dns.GetHostName()).AddressList[0], 2009);
            _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            _socket.Connect(_ipEndPoint);
            if (!_socket.Connected)
            {
                 return;
            }
            _network = new NetworkStream(_socket);
            _streamWriter = new StreamWriter(_network);
            _streamReader = new StreamReader(_network);
            _streamWriter.WriteLine("X1");

            _streamWriter.Flush();
            var readLine = _streamReader.ReadLine();
            if (readLine == null)
            {
                MessageBox.Show("Error messenger");
                return;
            }
            else
            {
                MessageBox.Show(readLine.ToString());
            }
            _streamWriter.Close();
            _streamReader.Close();
            _network.Close();
        }
    }
}


Every time a request to the server, I have to reconnect.Now how without creating connections that retains the session with the server and the server responds to the correct client is sending requests.
----
Image Example Here[^]">

解决方案

Please see my past answers:
Multple clients from same port Number[^],
an amateur question in socket programming[^].

—SA


这篇关于C#中的套接字是连续的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆