Socket桥(转载)
最好方案:使用haproxy 或者nginx转发。自己写程序性能和监控难保证,推荐使用开源软件替代。
源地址为:http://baishaobin2003.blog.163.com/blog/static/57381812201332355422107/
Socket在使用过程中往往会出现这样的问题
在生产的机器有一个服务,但是测试环境不能连接生产
中间有一台公共机可以连接两台机器,
这种情况下需要用到一个Socket桥
测试机器发送数据到公共机上,然后从公共机上发送数据到生产机器,由生产机返回数据到公共机,在有公共机转发回来测试机上来
=================================================================================
AGClientBase.java
=================================================================================
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket; public class AGClientBase { Socket socket = null; InputStream is = null; OutputStream os = null; String tCode = null; public String testClient(String data) {
try {
// 建立连接
socket = new Socket(getValueByKey.readValue("IpAddrss"), Integer
.valueOf(getValueByKey.readValue("Port")).intValue());
// 发送数据
os = socket.getOutputStream();
os.write(data.getBytes());
// 接收数据
is = socket.getInputStream();
byte[] b = new byte[4000];
is.read(b); return new String(b).trim();
} catch (Exception e) {
System.out.println("连接异常,请检查配置文件或对方Socket连接");
return null;
} finally {
try {
// 关闭流和连接
is.close();
os.close();
socket.close();
} catch (Exception e2) {
}
}
} }
======================================================================================================
LinkServer.java
======================================================================================================
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket; public class LinkServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(10000); while (true) {
Socket socket = server.accept();
invoke(socket);
}
} private static void invoke(final Socket socket) throws IOException {
new Thread(new Runnable() {
public void run() {
AGClientBase ag = new AGClientBase();
BufferedReader in = null;
PrintWriter out = null;
try {
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
byte[] arry = new byte[4000];
while(true){
inputStream.read(arry);
outputStream.write(ag.testClient(new String(arry)).getBytes());
outputStream.flush();
socket.close();
}
} catch(IOException ex) {
// ex.printStackTrace();
} finally {
try {
in.close();
} catch (Exception e) {}
try {
out.close();
} catch (Exception e) {}
try {
socket.close();
} catch (Exception e) {}
}
}
}).start();
}
}
======================================================================================================
LinkService.java
======================================================================================================
public interface LinkService {
public String reMsg();
public String reMsg(String repmsg);
} ======================================================================================================
getValueByKey
====================================================================================================== import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
/**
* @author wyyw
* 读取配置文件
* 根据配置文件中的内容获取要连接的地址
*
* */
public class getValueByKey { private static String filename= "linkconfig.propertes";
/**
* @author wyyw
* @param key 要查询的内容key
* @return 根据key查询出来的value
*
* */
public static String readValue( String key){ Properties props = new Properties();
FileInputStream in=null;
try{
in = new FileInputStream(filename);
props.load(in);
String value = props.getProperty(key);
return value;
}catch(Exception e){
System.out.println("读取配置文件失败,请检查配置文件 linkconfig.propertes 格式如下");
System.out.println("IpAddrss=*.*.*.*");
System.out.println("Port=*");
return null;
}finally{
try {
in.close();
} catch (IOException e) {
System.out.println("读取配置文件失败,请检查配置文件 linkconfig.propertes 格式如下");
System.out.println("IpAddrss=*.*.*.*");
System.out.println("Port=*");
}
}
}
}
======================================================================================================
linkconfig.propertes 和项目SRC文件夹同级
======================================================================================================
IpAddrss=127.0.0.1 Port=6500
Socket桥(转载)的更多相关文章
- GJM : 【C# 高性能服务器】完成端口、心跳的高性能Socket服务器 [转载]
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- 仔细讲解socket(转载https://www.zybuluo.com/phper/note/47110)
老实讲,到目前为止,我对socket一无所知,真的.我就现学现卖用过nodejs平台的socket.io搭建过一套高可用实时性的网页聊天系统,其他,就真的只是听过它. 今天就来仔仔细细的学一下,soc ...
- socket简述-------转载
“一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览 ...
- C++ socket编程-转载
转自:https://www.cnblogs.com/L-hq815/archive/2012/07/09/2583043.html 若有违规请联系我删除. 介绍 Socket编程让你沮丧吗?从man ...
- C#用SOCKET发送HTTP请求小例
private void button1_Click(object sender, EventArgs e) { string urlStr = this.textUrl.Text ; if (url ...
- 浅谈拒绝服务攻击的原理与防御(4):新型DDOS攻击 – Websocket和临时透镜
0×01 前言 前几天我已经分别发了三篇关于DDOS攻击相关的文章,我也是第一次在freebuf上发表这种文章,没想到有那么多人点击我真的很开心,前几天我为大家介绍的DDOS攻击的方法和原理都是已经出 ...
- JAVA十六进制数据接收与传输
一.十六进制转换工具类 主要包含十六进制字符串转ASCII,ASCII转十六进制字符串以及十六进制字符串转Byte数组等方法: /** * Created by wly on 2018/4/17. * ...
- GJM :异步Socket [转载]
原帖地址:http://blog.csdn.net/awinye/article/details/537264 原文作者:Awinye 目录(?)[-] 转载请原作者联系 Overview of So ...
- node与socket.io搭配小例子-转载
//服务端代码 io = require('socket.io').listen(app), fs = require('fs'), cookie=require('cookie'); request ...
随机推荐
- jsp页面缓存清理
jsp页面开发过程中,页面修改了,但是显示的还是以前的页面,没有显示刚修改的内容,清理缓存方法,加上头信息: <meta http-equiv="pragma" conten ...
- 关于网页pc端以及移动端的兼容性——测试
对于经常做网页设计的人员来说,网页的兼容性测试是不可缺少的,记得刚来单位的新手,都是要安装一款浏览器测试软件的,看自己制作的网页是否在各大浏览器中正常显示,有没有变形,或者网页效果不兼容等. 不仅仅是 ...
- 小谈 - web模仿手机打电话与正则表达式
昨天遇到了一个很棘手的问题,就是手机端调用web端的页面,如果用编辑器插入的内容页面中有电话的的数据就要变一下格式,让手机端可以实现拨号的功能. 研究了半天就是没一点头绪,但是偶尔看到数据中每一个电话 ...
- 在ASP.NET WebAPI 中使用缓存【Redis】
初步看了下CacheCow与OutputCache,感觉还是CacheOutput比较符合自己的要求,使用也很简单 PM>Install-Package Strathweb.CacheOutpu ...
- log4net按时间日期,文件大小和个数生成日志文件
从启动模板生成的基于ABP的应用默认使用的log4net日志框架,当然你也可以使用其他的日志框架. ABP默认的log4net.config配置文件配置的很简单,将所有的日志都写到了一个txt文件中, ...
- AMD加载器实现笔记(五)
前几篇文章对AMD规范中的config属性几乎全部支持了,这一节主要是进一步完善.到目前为止我们的加载器还无法处理环形依赖的问题,这一节就是解决环形依赖. 所谓环形依赖,指的是模块A的所有依赖项的依赖 ...
- (小常识)Dictionary的遍历
Dictionary<int, string> objDictionary = new Dictionary<int, string>(); ...
- 在js中对时间类型格式化字符串
Date.prototype.toString = function (format) { if (format == null) { format = "yyyy-MM-dd HH:mm: ...
- React Native02-开始运行 Android篇
1. 开始运行 1)用命令进入到新建的文件目录下,比如HelloWorld,再输入 react-native start: 在等待一段时间后,我们看到最后面有个地址,说明已经运行成功了. 我们输入地址 ...
- shell 中命令输入的快!捷!键!
非常棒!! 非常棒!! 删除ctrl + d 删除光标所在位置上的字符相当于VIM里x或者dlctrl + h 删除光标所在位置前的字符相当于VIM里hx或者dhctrl + k 删除光标后面所有字符 ...