如何用.net Remoting实现一个客户端需要连接多个服务器端

如题所述

1、使用socekt通信一般步骤
1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。
2)客户端:socker()建立套接字,连接(connect)服务器,连接上后使用send()和recv(),在套接字上写读数据,直至数据交换完毕,closesocket()关闭套接字。
3)服务器端:accept()发现有客户端连接,建立一个新的套接字,自身重新开始等待连接。该新产生的套接字使用send()和recv()写读数据,直至数据交换完毕,closesocket()关闭套接字。
2、多个客户端同时连接在一个服务器上
这时候服务器端应该使用多线程,每连接上一个客户端就给该客户端开启一个线程。监听端口的时候也要单独开一个线程、不然会阻塞主线程。这样做有一个明显的缺点,就是有N个客户端请求连接时,就会有N个线程,对程序的性能和计算机的性能影响很大,可以使用线程池进行管理。
使用线程池的好处:主要用于减少因频繁创建和销毁线程带来开销,因此那些经常使用且执行时间短的线程需要用线程池来管理。
3、C#版代码如下
服务器端代码:
[html] view plain copy
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;

namespace SockServer
{
class Program
{
static void Main(string[] args)
{
try
{
//把ip地址转换为实例
IPAddress ipa = IPAddress.Parse("127.0.0.1");
//监听端口8001
TcpListener mylsn = new TcpListener(ipa, 8001);
//开启监听
mylsn.Start();
//输出监听成功的信息
Console.WriteLine("在8001启动服务,等待连接");
//等待处理接入连接请求
while (true)
{
Socket mysock = mylsn.AcceptSocket();
Console.WriteLine("有连接,连接来自" + mysock.RemoteEndPoint);
work w = new work();
w.mysock = mysock;
w.mylsn = mylsn;
Thread t = new Thread(new ThreadStart(w.main));
t.Start();
}
}
catch
{ }
finally
{ }
}
}

class work
{
public Socket mysock;
public TcpListener mylsn;
public void main()
{
//接收客户端消息
byte[] data = new byte[100];
mysock.Receive(data);
string rt = System.Text.UTF8Encoding.UTF8.GetString(data);
Console.WriteLine(rt);
//给客户端发消息
mysock.Send(UTF8Encoding.UTF8.GetBytes("server callback"));
//释放资源
mysock.Close();
mylsn.Stop();
}
}
}
客户端代码:
[html] view plain copy
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;

namespace SockClient
{
class Program
{
public static void Main()
{
//新建客户端套接字
TcpClient tclient = new TcpClient();
//连接服务器
tclient.Connect("127.0.0.1", 8001);
Console.WriteLine("输入要发送的消息");
//读入要传输的字符
string str = Console.ReadLine();

//得到流
Stream stm = tclient.GetStream();
//发送字符串
ASCIIEncoding asen = new ASCIIEncoding();
byte[] data = asen.GetBytes(str);
stm.Write(data, 0, data.Length);
//接受服务器返回的消息
byte[] back = new byte[100];
int k = stm.Read(back, 0, 100);
//输出服务器返回的消息
for (int i = 0; i < k; i++)
{
Console.Write(Convert.ToChar(back[i]));
}
//关闭连接
tclient.Close();
}
}
}
温馨提示:内容为网友见解,仅供参考
无其他回答

(ASP.NET)里remoting是什么?
.net 的分布式开发技术,可以开发一个服务器端程序,程序中提供多种方法接口,然后客户端程序可以通过remoting的代理来调用服务器端的这些程序接口.来实现的程序的分布式部署.技术方案中有分布式需求的地方就可以使用这种技术:比如实现文件的分布式存储

C# Remoting总共有几种方法啊?
1.服务器端激活,又称 WellKnow 方式。服务器端激活又分为SingleTon和SingleCall两种模式。SingleTon模式:此为有状态模式。如果设置为SingleTon激活方式,则Remoting将为所有客户端建立同一个对象实例。当对象处于活动状态时,SingleTon实例会处理所有后来的客户端访问请求,而不管它们是同一个客户端,还是其他...

Remoting远程对象的激活方式
在使用Remoting远程对象之前,对象的实例化和初始化需要通过名为Activation的过程在服务器端进行。这一过程通常通过客户端通过通道创建远程对象,即对象的激活。Remoting中的远程对象激活主要分为两类:服务器端激活和客户端激活。服务器端激活,也称为Well-Known(知名对象)模式,其工作原理是服务器应用程序...

Remoting和WebService有什么区别 《转帖》
首先客户端从服务器的到WebService的WSDL,同时在客户端声称一个代理类(Proxy Class)这个代理类负责与WebService服务器进行Request 和Response,当一个数据(XML格式的)被封装成SOAP格式的数据流发送到服务器端的时候,就会生成一个进程对象并且把接收到这个Request的SOAP包进行解析,然后对事物进行处理,处理...

ASP.NET缓存管理的几种方法
正如你所知道的.NET Remoting通过单例把对象共享给各个客户端,所以使用单例的对象可以用来缓存数据以共享数据给各个不同的客户端。因为.NET Remoting可以运行在进程和机器之外,当我们想要缓存对象并且跨服务、跨用户、尤其是用在网站群时,这个特性非常有用。这种方法我们可以将数据缓存到单例对象的数据成员里并且提供...

如何用C# 实现远程关机呢
两种方法,一种是服务端开一个web service端口及实现关机注销等的函数,或封装一个关机注销等的类使用.net remoting。这样客户端直接通过访问服务端的这个远程函数或远程对象,就可以实现关机注销。另一种是通过windows远程关机的dos(cmd)命令,来实现这个功能,即使用 http:\/\/topic.csdn.net\/t\/20050620...

Remoting和Webservice的区别
2. 一般来说,remoting是和平台相关的,需要客户和服务器都是.NET,但可配置特性比较好,可以自定义协议。web service可以做到跨平台通信,但必须采用SOAP协议。3. Soap消息有rpc和文档两种样式。 文档样式的body元素中包含一个或多个元素,可以是任何内容,只要接受者理解就行了。rpc样式的的body元素中...

C# 怎样才能实现客户端通过服务器端连接数据库服务器???
第一步.客户端==》连接服务器并通讯,主要是发送SQL给服务器返回一个DataTable表using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net;using System.Net.Sockets;using ...

soa是什么,先评一下我的理解
对于.NET Remoting,EJB或者XML-RPC这些传统的分布式计算模型而言,他们的服务提供都是通过函数调用的方式进行的,一个功能的完成 往往需要通过客户端和服务器来回很多次函数调用才能完成。在Intra的环境下,这些调用给系统的响应速度和稳定性带来的影响都可以忽 略不计,但是在Inter环境下这些因素往往是决定...

REMOTING和WEBSERVICE有什么区别 详细�0�3
同时在客户端声称一个代理类(Proxy Class) 这个代理类负责与WebService 服务器进行Request 和Response 当一个数据(XML 格式的)被封装成SOAP 格式的数据流发送到服务器端的时候,就会生成一个进程对象并且把接收到这个Request 的SOAP 包进行解析,然后对事物进行处理,处理结束以后再对这个计算结果进行SOAP...

相似回答