请教webform 和 winform之间通信,也就是客户端和服务器之间的关系处理。类似于socket编程。

时间:2021-04-10 11:35:12
问题是这样的:
      asp.net 的 webform是客户端,我要在客户端的数据post到服务器端winform.
winform会做出相关的处理,服务器是这样处理的: 把事件触发的一些结果写入文本文件
(有想法是可以不用写入文件而直接返回客户端,但我做不到!会的朋友请告诉我,谢谢),然后把文本文件的内容
返回到客户端
。客户端接收到数据并打印在页上。

这样 我用了socket了 但是一直没有成功啊!
各位朋友,请帮帮忙吧,谢谢先了。

23 个解决方案

#1


我怎么感觉你写反了
webform是客户端??
winform是服务器端?

#2


请楼主再说一遍问题。

#3


如果倒过来,win form是客户端,web form是服务端,那根本就不用什么socket了(当然底层还是),直接发个HttpWebRequest请求就行了,所以我想楼主的情况应该是web form作为客户端, win form是服务端。
这样通讯的方法,我想到有两个办法。如果对数据的实时性要求不高,可以利用msmq或者数据库来中转,不然就用socket,下面是调试成功的部分代码:

win form服务端:
string strHostName = Dns.GetHostName();
IPHostEntry ipHostEntry = Dns.GetHostEntry(strHostName);
IPEndPoint localEndPoint = new IPEndPoint(ipHostEntry.AddressList[0], 12345);//假设监听12345端口
            Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            Socket receiver = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                listener.Bind(localEndPoint);
                listener.Listen(1);

                string message = "";
                while (message != "finish")
                {
                    receiver = listener.Accept();
                    byte[] buffer = new byte[2000];
                    int length = receiver.Receive(buffer);//这里假设从web form来的消息很短,一次就可以接收完,如果比较长,可以把buffer的长度设的大一些,或者用循环的方法
                    message = Encoding.ASCII.GetString(buffer, 0, length);
                }


web form:
        IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345);
        Socket receiver = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            receiver.Connect(remoteEndPoint);
            if (receiver.Connected)
            {
                  byte[] buffer;
                  buffer = Encoding.ASCII.GetBytes("abcde");//要发送的内容
                     receiver.Send(buffer);
            }

#4


奇怪为什么winform要做服务器端。

建议将winform的程序分好层,将业务逻辑分离出来,形成类库。
用web service做服务器端,引用业务逻辑类库。 

#5


引用 4 楼 findcaiyzh 的回复:
奇怪为什么winform要做服务器端。

建议将winform的程序分好层,将业务逻辑分离出来,形成类库。
用web service做服务器端,引用业务逻辑类库。


同意

#6


webform socket?

客户端socket ,flash?

#7


不用winform做服务器端的话 microsoft speech sdk 在asp.net中我所要的事件没有被触发出来啊
,例如 SpVoice vox = new SpVoiceClass();
然后委托:
vox.Viseme += new _ISpeechVoiceEvents_VisemeEventHandler(vox_Viseme);     //
            vox.Word += new _ISpeechVoiceEvents_WordEventHandler(vox_Word);
这两个是无法触发出来的啊,微软的一个专家说了  microsoft speech sdk 是基于COM 的程序的 asp.net没有消息循环机制,不会触发出来。

我想要这个结果 我只能这样选择用winform做服务器啦。
我也想过用web service  但是怎么用,获得触发结果,更难啊!

各路朋友 请教啦。

#8


并且把触发结果都返回客户端!这样很慢,于是我觉得很慢。
并且 客户端已关闭 就会影响到服务器 端了,

#9


引用 4 楼 findcaiyzh 的回复:
奇怪为什么winform要做服务器端。

建议将winform的程序分好层,将业务逻辑分离出来,形成类库。
用web service做服务器端,引用业务逻辑类库。


请问有什么好的方法啊?谢谢先了

#10


楼主的意思是这样吧:

用winform做服务器端,webform 做客户端 然后客户端发送数据到服务器端
让服务器端处理,再返回客户端。
过程确实不简单 , 如果涉及客户端多人的时候 还要考虑服务器负载,处理问题


我也不懂多少 


帮顶!!!

#11


去我的共享资源里有完整的 异步socket代码客服端和服务端  自己去下

#12


webform做客户端那你的web页面存在哪个服务器上的也是同winform放一起嘛??

webform有没有监听端口的功能不清楚。

#13


引用楼主 bornjasoncen 的回复:
问题是这样的:
  asp.net 的 webform是客户端,我要在客户端的数据post到服务器端winform.


这是个弥天大误解!

asp.net程序永远工作在web服务器端,它只是在客户端请求时返回html字符串而已。

#14


或者你说说如何用asp.net程序post数据给winform程序吧

#15


还有“文本文件”而不是直接winform直接返回数据给请求它的asp.net程序。

唉,劝你找一个专业程序员来做这类程序。自己做多累啊。

#16


引用 13 楼 sp1234 的回复:
引用楼主 bornjasoncen 的回复:
问题是这样的:
asp.net 的 webform是客户端,我要在客户端的数据post到服务器端winform.


这是个弥天大误解!

asp.net程序永远工作在web服务器端,它只是在客户端请求时返回html字符串而已。

我的意思是将客户端webform的数据 post 到 服务器端winform

两个在同一个服务器上。

#17


引用 16 楼 cenphpweb 的回复:
引用 13 楼 sp1234 的回复:

引用楼主 bornjasoncen 的回复:
问题是这样的:
asp.net 的 webform是客户端,我要在客户端的数据post到服务器端winform.


这是个弥天大误解!

asp.net程序永远工作在web服务器端,它只是在客户端请求时返回html字符串而已。

我的意思是将客户端webform的数据 post 到 服……


对啊 楼上的说得是我想要的啊

#18


引用 1 楼 zenghd 的回复:
我怎么感觉你写反了
webform是客户端??
winform是服务器端?

同意

#19


 webform是客户端啊 
winform服务端啊

大哥们!!!

请问 还有哪里不清楚哦!!!!

#20


winform?难道想回到CGI的时代?不明白,sp说的对,我不知道以前在CGI时代的静态网页怎么用程序处理请求,但既然是程序,winform应该也行,但就是不知道asp.net行不行了。。。

#21


唉,直接使用数据库吧,WebForm把数据Post到数据库里,WinForm定时检查数据库,操作,完成
不用客HTTP、SOCKET

#22


说到底就是web和winform通讯吧,用socket、remoting、wcf都可以,有文件、数据库做介质也可以。
但是你要用post,那你的winform首先需要是一个web服务器。

#23


 不懂你意思

#1


我怎么感觉你写反了
webform是客户端??
winform是服务器端?

#2


请楼主再说一遍问题。

#3


如果倒过来,win form是客户端,web form是服务端,那根本就不用什么socket了(当然底层还是),直接发个HttpWebRequest请求就行了,所以我想楼主的情况应该是web form作为客户端, win form是服务端。
这样通讯的方法,我想到有两个办法。如果对数据的实时性要求不高,可以利用msmq或者数据库来中转,不然就用socket,下面是调试成功的部分代码:

win form服务端:
string strHostName = Dns.GetHostName();
IPHostEntry ipHostEntry = Dns.GetHostEntry(strHostName);
IPEndPoint localEndPoint = new IPEndPoint(ipHostEntry.AddressList[0], 12345);//假设监听12345端口
            Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            Socket receiver = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                listener.Bind(localEndPoint);
                listener.Listen(1);

                string message = "";
                while (message != "finish")
                {
                    receiver = listener.Accept();
                    byte[] buffer = new byte[2000];
                    int length = receiver.Receive(buffer);//这里假设从web form来的消息很短,一次就可以接收完,如果比较长,可以把buffer的长度设的大一些,或者用循环的方法
                    message = Encoding.ASCII.GetString(buffer, 0, length);
                }


web form:
        IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345);
        Socket receiver = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            receiver.Connect(remoteEndPoint);
            if (receiver.Connected)
            {
                  byte[] buffer;
                  buffer = Encoding.ASCII.GetBytes("abcde");//要发送的内容
                     receiver.Send(buffer);
            }

#4


奇怪为什么winform要做服务器端。

建议将winform的程序分好层,将业务逻辑分离出来,形成类库。
用web service做服务器端,引用业务逻辑类库。 

#5


引用 4 楼 findcaiyzh 的回复:
奇怪为什么winform要做服务器端。

建议将winform的程序分好层,将业务逻辑分离出来,形成类库。
用web service做服务器端,引用业务逻辑类库。


同意

#6


webform socket?

客户端socket ,flash?

#7


不用winform做服务器端的话 microsoft speech sdk 在asp.net中我所要的事件没有被触发出来啊
,例如 SpVoice vox = new SpVoiceClass();
然后委托:
vox.Viseme += new _ISpeechVoiceEvents_VisemeEventHandler(vox_Viseme);     //
            vox.Word += new _ISpeechVoiceEvents_WordEventHandler(vox_Word);
这两个是无法触发出来的啊,微软的一个专家说了  microsoft speech sdk 是基于COM 的程序的 asp.net没有消息循环机制,不会触发出来。

我想要这个结果 我只能这样选择用winform做服务器啦。
我也想过用web service  但是怎么用,获得触发结果,更难啊!

各路朋友 请教啦。

#8


并且把触发结果都返回客户端!这样很慢,于是我觉得很慢。
并且 客户端已关闭 就会影响到服务器 端了,

#9


引用 4 楼 findcaiyzh 的回复:
奇怪为什么winform要做服务器端。

建议将winform的程序分好层,将业务逻辑分离出来,形成类库。
用web service做服务器端,引用业务逻辑类库。


请问有什么好的方法啊?谢谢先了

#10


楼主的意思是这样吧:

用winform做服务器端,webform 做客户端 然后客户端发送数据到服务器端
让服务器端处理,再返回客户端。
过程确实不简单 , 如果涉及客户端多人的时候 还要考虑服务器负载,处理问题


我也不懂多少 


帮顶!!!

#11


去我的共享资源里有完整的 异步socket代码客服端和服务端  自己去下

#12


webform做客户端那你的web页面存在哪个服务器上的也是同winform放一起嘛??

webform有没有监听端口的功能不清楚。

#13


引用楼主 bornjasoncen 的回复:
问题是这样的:
  asp.net 的 webform是客户端,我要在客户端的数据post到服务器端winform.


这是个弥天大误解!

asp.net程序永远工作在web服务器端,它只是在客户端请求时返回html字符串而已。

#14


或者你说说如何用asp.net程序post数据给winform程序吧

#15


还有“文本文件”而不是直接winform直接返回数据给请求它的asp.net程序。

唉,劝你找一个专业程序员来做这类程序。自己做多累啊。

#16


引用 13 楼 sp1234 的回复:
引用楼主 bornjasoncen 的回复:
问题是这样的:
asp.net 的 webform是客户端,我要在客户端的数据post到服务器端winform.


这是个弥天大误解!

asp.net程序永远工作在web服务器端,它只是在客户端请求时返回html字符串而已。

我的意思是将客户端webform的数据 post 到 服务器端winform

两个在同一个服务器上。

#17


引用 16 楼 cenphpweb 的回复:
引用 13 楼 sp1234 的回复:

引用楼主 bornjasoncen 的回复:
问题是这样的:
asp.net 的 webform是客户端,我要在客户端的数据post到服务器端winform.


这是个弥天大误解!

asp.net程序永远工作在web服务器端,它只是在客户端请求时返回html字符串而已。

我的意思是将客户端webform的数据 post 到 服……


对啊 楼上的说得是我想要的啊

#18


引用 1 楼 zenghd 的回复:
我怎么感觉你写反了
webform是客户端??
winform是服务器端?

同意

#19


 webform是客户端啊 
winform服务端啊

大哥们!!!

请问 还有哪里不清楚哦!!!!

#20


winform?难道想回到CGI的时代?不明白,sp说的对,我不知道以前在CGI时代的静态网页怎么用程序处理请求,但既然是程序,winform应该也行,但就是不知道asp.net行不行了。。。

#21


唉,直接使用数据库吧,WebForm把数据Post到数据库里,WinForm定时检查数据库,操作,完成
不用客HTTP、SOCKET

#22


说到底就是web和winform通讯吧,用socket、remoting、wcf都可以,有文件、数据库做介质也可以。
但是你要用post,那你的winform首先需要是一个web服务器。

#23


 不懂你意思