c# WCF 可以像socket那样监听吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# WCF 可以像socket那样监听吗?相关的知识,希望对你有一定的参考价值。

能给几句监听的代码或者简单的例子吗?谢谢了
服务器和客户端通信是怎么实现的?
WCF你能用UDP协议吗?

当然可以监听啦,如:
namespace WCFChatService

class Program

static void Main(string[] args)

NetTcpBinding bind = new NetTcpBinding();
Uri uri = new Uri(ConfigurationManager.AppSettings["conAddress"]);//从配置文件中读取服务的Url
ServiceHost host = new ServiceHost(typeof(WCFChatService.ChatService), uri);
host.Open();
Console.WriteLine("聊天室服务器开始监听: endpoint 0", uri.ToString());
Console.WriteLine("按 ENTER 停止服务器监听...");
Console.ReadLine();
host.Abort();
host.Close();



WCF的通信程序也是要分客户端和服务器端得,和socket的通信方式比较类似。
WCF中有个绑定的概念,描述了服务传输的通信方式,使用绑定可以指定:传输的协议,安全要求,编码方式,事务处理要求,可靠性等。现有的绑定中,没有支持UDP协议的,主要以TCP和HTTP为主。
参考技术A // 启动线程 启动监听按钮
private void button1_Click(object sender, EventArgs e)

  Thread th = new Thread(new ThreadStart(handleSc));
  th.IsBackground = true;
  th.Start();


private void handleSc()

int port = 8080;
port = System.Convert.ToInt32(strSPort);
string hostIp = "127.0.0.1";
hostIp = textBox4.Text;
IPAddress ip = IPAddress.Parse(hostIp);
IPEndPoint ipe = new IPEndPoint(ip, port);
Socket recvSocket = null;
Socket sS = null;
while (true)

try

// 创建一个Socket类
sS = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 绑定端口
sS.Bind(ipe);
sS.ReceiveTimeout = INT_TIMEOUT;
// 开始监听
sS.Listen(0);
// 为新建连接创建新的Socket
recvSocket = sS.Accept();
............

catch(...)

.....


参考技术B <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>javascript事件监听完整实例(含注释)</title>
<meta name="generator" content="editplus" />
<meta name="Keywords" content="AddEventHandler,addEventListener,attachEvent,appendChild,getElementsByTagNamem,createElement,createTextNode,IE与FF兼容性,JavaScript事件,JavaScript监听">
<script type="text/javascript">
var oEventUtil = new Object();
oEventUtil.AddEventHandler = function(oTarget,sEventType,fnHandler)

//IE和FF的兼容性处理
//如果是FF
if(oTarget.addEventListener)
oTarget.addEventListener(sEventType,fnHandler,false);

//如果是IE
else if(oTarget.attachEvent)
oTarget.attachEvent('on'+sEventType,fnHandler);
else
oTarget['on'+sEventType] = fnHandler;

;
//定义oT事件函数
var oT = function()

var oEvent = arguments[0];
var oTarget = oEvent.target || oEvent.srcElement;
alert(oTarget.tagName+'\n'+oTarget.innerHTML+'\n'+oEvent.type);

//页面加载时制造36个p,每个p里面显示的文字是Line + i
window.onload = function()
for(var i = 0;i<36;i++)

var oP = document.createElement('p');
var oText = document.createTextNode('Line'+i);
oP.appendChild(oText);
//在文档的第一个div里面添加这些p
document.getElementsByTagName('div')[0].appendChild(oP);

//找到所有的p,并添加click的事件监听
var oPList = document.getElementsByTagName('p');
for(var i = 0;i<oPList.length;i++)

oEventUtil.AddEventHandler(oPList[i],'click',oT);


</script>
<style type="text/css">
*

margin:0px;
padding:0px;

div

margin:10px auto;
width:690px;
border:solid 1px #000;
min-height:600px;
padding:20px;

div p

padding:4px;
margin-left:4px;
margin-top:4px;
border:solid 1px blue;
width:100px;
float:left;

pre
margin:20px 0 0 0;

a

text-indent:4em;

</style>
</head>
<body >
<div>
</div>
</body>
</html>
这个看看行不行 够不够你满足

怎么实现的问题:
可以向下这样的情景:
假如有三台机器:A、B、C
A是web服务器 B是一个客户机 C是另一个客户机

B通过浏览器向A发送了Data,而A又把这个Data发给C
C在登陆时同时开一个端口进行检听A的消息.此时A记录C登陆状态和IP
当B登陆时,A根据帐号信息查看登陆状态,如果已登陆,则通过先前保留的IP发送消息至C处理
web服务器与桌面客户端通信可以通过socket做到

WCF的Tcp Listener只处理符合NET message framing protocol的tcp请求.
还是用Socket吧!
参考技术C 像scoket 那样是不可能的,你可以二者结合使用本回答被提问者采纳

C# 或 C++ ;可以像在 CE 中那样修改内存吗? [关闭]

【中文标题】C# 或 C++ ;可以像在 CE 中那样修改内存吗? [关闭]【英文标题】:C# or C++ ; It is possible to modify memory like in CE? [closed] 【发布时间】:2018-02-04 19:12:24 【问题描述】:

有可能CE 那样修改记忆吗? 比如:

原创

je 011D5F29

修改

jmp 011D5F6E

C# 中可以做到吗? 如果不是,那么 C++ 有可能吗?

如果在 C#C++ 中可行,请将代码发送给我 感谢阅读 :)

【问题讨论】:

我忘了说我需要修改另一个应用的内存 【参考方案1】:

它在 C/C++ 中是可行的。如果您有一个寄存器(例如在微控制器中)并且您希望读取该值(因为它可以在您的代码之外更改,硬件方面),那么您可以

#define PORTBASE 0x40000000
unsigned int volatile * port = (unsigned int *) REG; 

*port = value; /* write to port */
value = *port; /* read from port */ 

Source

我不确定它是否可以在 C# 中完成。

希望这是相关的。

【讨论】:

高度依赖操作系统(你正确地给出了微控制器的例子,古老的 DOS 也是如此)。在大多数现代系统上是不可能的。 ...似乎在 C# 中可以进行非常“黑客攻击”(禁用安全等...),但由于操作系统而无法正常工作

以上是关于c# WCF 可以像socket那样监听吗?的主要内容,如果未能解决你的问题,请参考以下文章

Socket.on() 监听任何事件

WCF - 是不是可以使用 HttpListener 或套接字来监听 WCF ChannelFactory

golang 可以监听多个端口吗

C# 或 C++ ;可以像在 CE 中那样修改内存吗? [关闭]

c# 监听浏览器(包括火狐,ie等任何浏览器)打开url地址,监听啥时候打开和关闭???

ss命令用法小记