最好方案:使用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桥(转载)的更多相关文章

  1. GJM : 【C# 高性能服务器】完成端口、心跳的高性能Socket服务器 [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  2. 仔细讲解socket(转载https://www.zybuluo.com/phper/note/47110)

    老实讲,到目前为止,我对socket一无所知,真的.我就现学现卖用过nodejs平台的socket.io搭建过一套高可用实时性的网页聊天系统,其他,就真的只是听过它. 今天就来仔仔细细的学一下,soc ...

  3. socket简述-------转载

    “一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览 ...

  4. C++ socket编程-转载

    转自:https://www.cnblogs.com/L-hq815/archive/2012/07/09/2583043.html 若有违规请联系我删除. 介绍 Socket编程让你沮丧吗?从man ...

  5. C#用SOCKET发送HTTP请求小例

    private void button1_Click(object sender, EventArgs e) { string urlStr = this.textUrl.Text ; if (url ...

  6. 浅谈拒绝服务攻击的原理与防御(4):新型DDOS攻击 – Websocket和临时透镜

    0×01 前言 前几天我已经分别发了三篇关于DDOS攻击相关的文章,我也是第一次在freebuf上发表这种文章,没想到有那么多人点击我真的很开心,前几天我为大家介绍的DDOS攻击的方法和原理都是已经出 ...

  7. JAVA十六进制数据接收与传输

    一.十六进制转换工具类 主要包含十六进制字符串转ASCII,ASCII转十六进制字符串以及十六进制字符串转Byte数组等方法: /** * Created by wly on 2018/4/17. * ...

  8. GJM :异步Socket [转载]

    原帖地址:http://blog.csdn.net/awinye/article/details/537264 原文作者:Awinye 目录(?)[-] 转载请原作者联系 Overview of So ...

  9. node与socket.io搭配小例子-转载

    //服务端代码 io = require('socket.io').listen(app), fs = require('fs'), cookie=require('cookie'); request ...

随机推荐

  1. blender 2.6 快捷键

    右键单击 选中 A 取消选择/全选 中键拖动 旋转 中键滚动放大/缩小 Shift+中键拖动 平移 右上斜线三角区域拖动 产生新视窗 Shift+c准星复位 Num1前视图 Ctrl+Num1后视图 ...

  2. 快速学习C语言一: Hello World

    估计不会写C语言的同学也都听过C语言,从头开始快速学一下吧,以后肯定能用的上. 如果使用过其它类C的语言,如JAVA,C#等,学C的语法应该挺快的. 先快速学习并练习一些基本的语言要素,基本类型,表达 ...

  3. android precelable和Serialization序列化数据传输

    一 序列化原因: 1.永久性保存对象,保存对象的字节序列到本地文件中:2.通过序列化对象在网络中传递对象:3.通过序列化在进程间传递对象. 二 至于选取哪种可参考下面的原则: 1.在使用内存的时候,P ...

  4. HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误

    (来源:http://www.tuicool.com/articles/Ermmmyn) HTTP请求方法: 常用方法: Get\Post\Head (1)Get方法. 取回请求URL标志的任何信息, ...

  5. .NET跨平台实践:用C#开发Linux守护进程(转)

    Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...

  6. Java设计模式6:策略模式

    策略模式 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 策略模式的结构 策略模式是对算法的包 ...

  7. [ACM_几何] Fishnet

      http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28417#problem/C 本题大意:有一个1X1的矩形,每边按照从小到大的顺序给n ...

  8. 定时关闭AWS上的EC2机器实例

    最近一段时间在做一个产品从阿里云向亚马逊云中国区迁移的前期试验.亚马逊中国区并没有开放免费体验账号,使用的每一份资源都要实打实的掏钱.而为了实验我们使用时一般要启动好几台EC2实例.为了不浪费辛辛苦苦 ...

  9. EF架构~数据分批批量提交

    回到目录 对于大数据量提交,包括插入,更新和删除,我始终不建议用EF自带的方法,因为它会增加与数据库的交互次数,一般地,EF的一个上下文在提交时会打开一个数据连接,然后把转换成的SQL语句一条一条的发 ...

  10. .NetCore~Linux环境下部署

    NetCore正式版已经出现有段时候了,Windows下使用vs2015开发.netCore应用程序,然后通过dotnet程序开启WEB服务,用着很像node.js,当然我们不会于只局限于window ...