出门左转可以看到吵吵写的一些关于金域接口的文章。为了使得内网的用户可以直接访问到金域的接口,吵吵以前使用的方法是用代理服务器。
使用CCProxy来做代理服务器的好处是既能够访问到金域的接口,又能够通过它的设置来限制其它网站的访问,如百度,QQ等。
但是也会有以下问题:
1、CCProxy是收费软件,网上虽然有破解版本的,但是只能够用几天就不行了。于是吵吵拼命去找真正的破解版,如你所愿,中毒了!想来明白为什么现在做软件的人那么少,因为大家发现做软件压根不挣钱,就去搞互联网了,重点都在云端了。
2、每次在工作电脑上装上程序后,还得在IE设置里面,添加代理设置,写上IP地址和端口。除了配置这个的麻烦不说,添加代理后,这台电脑就没法访问其它网站了,这个很蛋疼。
3、代理的速度慢,由于用不了CCProxy,就去试了试大名鼎鼎的Squid,可能是这个玩意儿太复杂了,在个小PC上跑起来,速度是龟速啊。
怎么办,怎么办?
还是自己动手丰衣足食吧,因此决定自己写:
1、编写KingMedAgent程序,该程序放在双网卡服务器上,负责接收内网用户发来的条码请求,然后将收到的条码发送到金域接口,收到金域的数据后,将数据返回给客户端。该程序主要思路:
1)建立TCP Server接收来自内网的连接,建立多线程来读取内网通过TCP发送过来的条码号数据。
2)接收数据后使用金域的WebService接口将数据抓回本地。
3)通过已经建立的TCP socket将数据发送到客户端。
2、内网的接收和排样程序不再使用webservice获取数据,而是通过TCP Client,发送条码,然后通过socket来接收返回的数据。
完成程序后,只需要将客户端放到内网电脑上,既不用设置代理,速度又很快。折腾了好久的代理上网问题终于完美收官。
以下是KingMedAgent的服务端程序部分代码,包括多线程和socket的异步处理等,有兴趣可以看看,懂TCP通信的请掠过!
private void frmMain_Load(object sender, EventArgs e) { Thread thread = new Thread(new ThreadStart(Listening)); thread.Start(); } private void Listening() { myServer = new IPEndPoint(IPAddress.Any, 6789); sockets = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sockets.Bind(myServer); sockets.Listen(50); AddText("开始监听:6789"); while (true) { acceptSocket = sockets.Accept(); if (acceptSocket.Connected) { IPEndPoint remoteIP = (IPEndPoint)acceptSocket.RemoteEndPoint; AddText("收到连接:" + remoteIP.Address.ToString()); Thread thread = new Thread(new ThreadStart(CheckingData)); thread.Start(); } } } private void CheckingData() { bool bAlive = true; Socket apSocket=acceptSocket; while (bAlive) { if (apSocket.Connected == true) { try { NetworkStream netStream = new NetworkStream(apSocket); byte[] buffer = new byte[apSocket.Available]; netStream.Read(buffer, 0, buffer.Length); string strBar = Encoding.Unicode.GetString(buffer); if (strBar != "") { AddText("收到条码请求:" + strBar); KingWebService wb = new KingWebService(); string strResponse = wb.GetRequestInfoByBar(strBar.Trim()); if (strResponse == "0") { AddText("远程连接失败"); } if (strResponse == "1") { AddText("该条码不存在"); } Byte[] sendBytes = Encoding.Unicode.GetBytes(strResponse); AddText("发送文本字节长度:" + sendBytes.Length.ToString()); netStream.Write(sendBytes, 0, sendBytes.Length); } //netStream.Dispose(); } catch(Exception) { bAlive = false; } } } }
如无特别说明,本博客文章皆为原创。转载请说明,来自吵吵博客。
原文链接:http://chaochaoblog.com/archives/2915
吵吵微信朋友圈,请付款实名加入:
付出总会有回报的
付出总会有回报的