如何在服务器端获取客户端访问的端口(服务器端开启了多个端口供客户端访问)
解决方案 »
- linq大师快来
- 关于角色权限管理的讨论
- 为什么stringbuilder转成string后转义符失效了
- 正则表达式高手进!截取属性值
- C++中的引用符号,在C#中怎样表示
- 急求 鼠标拖动图片框问题
- 如何给datagridview里添加自定义列,看了ms的文章,看不懂,那位给讲一下!
- codefirst创建MySQL数据库报错: Specified key was too long; max key length i
- (!!!公告!!!)正则表达式专用讨论区(精华)
- Excel合并单元格怎么解决?
- PropertyGrid PropertyBag ExpandableObjectConverter
- 关于C#小程序的...
TcpServerChannel channel=new TcpServerChannel(8086);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(ServerObject),"Connection",WellKnownObjectMode.SingleCall);//客户端
ChannelServices.RegisterChannel(new TcpClientChannel());
sql.ServerObject obj = (ServerObject)Activator.GetObject(typeof(ServerObject),"tcp://192.168.0.20:8086/connection");
// Defines how well-known objects are activated.
[Serializable]
[ComVisible(true)]
public enum WellKnownObjectMode
{
// Summary:
// Every incoming message is serviced by the same object instance.
Singleton = 1,
//
// Summary:
// Every incoming message is serviced by a new object instance.
SingleCall = 2,
}你用的 SingleCall?
要区分吗
能说的具体点吗
public TcpServerChannel (
IDictionary properties,
IServerChannelSinkProvider sinkProvider,
IAuthorizeRemotingConnection authorizeCallback
)
using System.Collections;
using System.IO;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Messaging;
using System.Runtime.Remoting.Channels;
using System.Threading;
using System.Net;
using System.Security.Principal;namespace r
{
public class Remotable : MarshalByRefObject
{ private int callCount = 0; public int GetCount()
{ callCount++;
return (callCount);
} }
public class cmyLogin : IAuthorizeRemotingConnection
{
public bool IsConnectingEndPointAuthorized(EndPoint endPoint)
{
if (endPoint.AddressFamily.ToString() != "")
return true;
else
return true;
}
public bool IsConnectingIdentityAuthorized(IIdentity identity)
{
return true;
} }
public class ClientIPServerSinkProvider : IServerChannelSinkProvider
{
private IServerChannelSinkProvider next = null;
public ClientIPServerSinkProvider()
{ } public void GetChannelData(IChannelDataStore channelData)
{ } public IServerChannelSink CreateSink(IChannelReceiver channel)
{
IServerChannelSink nextSink = null;
if (next != null)
{
nextSink = next.CreateSink(channel);
}
return new ClientIPServerSink(nextSink);
} public IServerChannelSinkProvider Next
{
get { return next; }
set { next = value; }
}
} public class ClientIPServerSink : BaseChannelObjectWithProperties, IServerChannelSink, IChannelSinkBase
{ private IServerChannelSink _next; public ClientIPServerSink(IServerChannelSink next)
{
_next = next;
} public void AsyncProcessResponse(System.Runtime.Remoting.Channels.IServerResponseChannelSinkStack sinkStack, System.Object state, System.Runtime.Remoting.Messaging.IMessage msg, System.Runtime.Remoting.Channels.ITransportHeaders headers, System.IO.Stream stream)
{ } public Stream GetResponseStream(System.Runtime.Remoting.Channels.IServerResponseChannelSinkStack sinkStack, System.Object state, System.Runtime.Remoting.Messaging.IMessage msg, System.Runtime.Remoting.Channels.ITransportHeaders headers)
{
return null;
} public System.Runtime.Remoting.Channels.ServerProcessing ProcessMessage(System.Runtime.Remoting.Channels.IServerChannelSinkStack sinkStack, System.Runtime.Remoting.Messaging.IMessage requestMsg, System.Runtime.Remoting.Channels.ITransportHeaders requestHeaders, System.IO.Stream requestStream, out System.Runtime.Remoting.Messaging.IMessage responseMsg, out System.Runtime.Remoting.Channels.ITransportHeaders responseHeaders, out System.IO.Stream responseStream)
{ if (_next != null)
{
IPAddress ip = requestHeaders[CommonTransportKeys.IPAddress] as IPAddress; Console.WriteLine(ip.ToString()); CallContext.SetData("ClientIPAddress", ip); ServerProcessing spres = _next.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream); return spres; } else
{ responseMsg = null; responseHeaders = null; responseStream = null; return new ServerProcessing(); } } public IServerChannelSink NextChannelSink
{ get { return _next; } set { _next = value; } } }}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Security.Permissions;
using System.Runtime.Serialization.Formatters;
using System.Collections;
using r;
namespace WindowsApplication12
{ public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private System.Runtime.Remoting.Channels.Tcp.TcpServerChannel serverChannel;
private BinaryServerFormatterSinkProvider serverProvider;
private ClientIPServerSinkProvider IPProvider;
private cmyLogin mylogin;
private void Form1_Load(object sender, EventArgs e)
{
mylogin=new cmyLogin();
serverProvider = new BinaryServerFormatterSinkProvider();
IPProvider = new ClientIPServerSinkProvider(); IPProvider.Next = serverProvider;//链接上下一个provider
serverProvider.TypeFilterLevel = TypeFilterLevel.Full; IDictionary props = new Hashtable();
props["port"] = 9090;
props["id"] = string.Empty; serverChannel =
new TcpServerChannel(props, IPProvider,mylogin); RemotingConfiguration.RegisterWellKnownServiceType(
typeof(Remotable), "Remotable.rem", WellKnownObjectMode.Singleton
); // Show the name and priority of the channel.
Console.WriteLine("Channel Name: {0}", serverChannel.ChannelName);
Console.WriteLine("Channel Priority: {0}", serverChannel.ChannelPriority); // Show the URIs associated with the channel.
ChannelDataStore data = (ChannelDataStore)serverChannel.ChannelData;
foreach (string uri in data.ChannelUris)
{
Console.WriteLine(uri);
} // Wait for method calls.
Console.WriteLine("Listening...");
}
}
}
我正在看...
很感谢,withcsharp()
最后的结果 我做好后再贴出来给大家.