- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试为充当 TCP/IP 服务器的硬连线设备编写模拟器。
我有一个连接到该服务器并进行通信的 VB6 程序,但是它会间歇性地失败,我需要确定出了什么问题,所以我正在编写一个程序来模拟服务器。
我构建了以下 Java 程序来监听来自 VB 程序的连接,并使用与服务器设备相同的信息进行响应。
public class ServerSim {
public static void main(String[] args){
int port = 23;
System.out.println("[Listening for Connection]");
try{
ServerSocket ss;
ss = new ServerSocket(port);
Socket s;
// The program will wait here until a connection is made.
s = ss.accept();
// Print what client we're connected to.
String client;
client = s.getInetAddress().toString();
String localPort = Integer.toString(s.getLocalPort());
String portNo = Integer.toString(s.getPort());
System.out.println("[Connected to "+client +"] Port:" + portNo + " localPort: " + localPort);
//Set up Scanner / Writer to read / write data to client.
Scanner in;
//Scanner sc = new Scanner(System.in);
in = new Scanner(s.getInputStream());
PrintWriter out;
out = new PrintWriter(s.getOutputStream(),true);
PrintWriter log = openWriter("Log.txt");
// Establish a 5second connection
s.setSoTimeout(5000);
try{
boolean result = establishConnection(in, out);
String input = in.nextLine();
System.out.println("Recieved: " + input);
String response = input;
out.println(response);
System.out.println("Responded: " + response);
log.println(input + "->" + response);
}
catch(Exception e){
System.err.println("EXC: "+e.getMessage());
e.printStackTrace();
}
System.out.println("[Closing Connections]");
in.close();
out.close();
log.close();
s.close();
ss.close();
}catch(Exception e){
e.printStackTrace();
}
}
private static boolean establishConnection(Scanner in, PrintWriter out){
// we have a connnection - Start by outputtinga welcome message.
out.print("Welcome Session 0\r\n");
out.flush();
out.print("User:\r\n");
out.flush();
System.out.println("[Welcome sent - Waiting Response]");
String input = in.nextLine(); // Recieve the first line. Should be a User
System.out.println("[Recieved '"+input+"' - Sending anticipated reply]");
out.println("Password:");
input = in.nextLine(); // Recieve the first line. Should be a User
System.out.println("[Recieved '"+input+"' - Sending anticipated reply]");
out.println("User Logged in");
return true;
}
private static PrintWriter openWriter(String name){
try{
File file = new File(name);
PrintWriter out = new PrintWriter(
new BufferedWriter(
new FileWriter(file, true)),true);
return out;
}
catch(IOException e){
System.out.println("I/O Error");
System.exit(0);
}
return null;
}
}
问题是 VB1 程序不接受来 self 的程序的输入。
我将成功设备的网络数据包捕获与我自己程序的流量捕获进行了比较,所有相关内容都是相同的...除了回复端口。
在我的程序中,serversocket随机分配了一个端口来响应VB6程序,但是当VB6程序连接到我试图模拟的物理设备时,设备只在端口1602上回复。
我的问题是,当我正在监听端口 23 的连接时(这一切都很好),我如何获得创建的套接字以在端口 1602 上回复而不是随机跳转 2000 - 3000 标记?
我能看到的所有回复和问题都是围绕套接字或多线程而不锁定等待连接的端口。
如果这不是一个目标,那么有人可以为我指出一个更好的解决方案来实现 UI 想要实现的目标吗?
我知道有人会说为什么不使用实际设备设置装备,但它们很昂贵,而且我没有现成的备用设备来设置装备。那个,现在这个问题已经向我提出,我不禁要弄清楚发生了什么! :-)
最佳答案
如果您想在端口 1602 上回复 vb-app(并且 vb-app 尚未在其端使用端口 1602),您将需要另一个(新)套接字。
ServerSocket.accept();
返回一个 java.net.Socket
。此连接由 4 个属性标识:client-port、client-ip、server-port、server-ip。
随机分配(您所说的)回复端口的不是服务器(您的程序),而是客户端(vb-app)。如果客户端不这样做,服务器就不知道应该将响应数据包发送到哪里。
您可能想要创建一个 java.net.Socket
,其中包含 vb 应用程序的 ip 和端口 1602。很可能 vb-app 充当客户端和 服务器。
关于java - 如何在 JAVA 中更改服务器套接字连接的回复端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11140626/
SO亲爱的 friend 们: 2014 年 3 月 18 日。我正在处理一种情况,在使用 ng-repeat 时,数组内的元素(我从 Json 字符串中获取)更改了原始顺序。 需要明确的是,数组中的
有很多问题询问如何在 JavaScript 单击处理程序中更改 div 的类,例如,此处:Change Div style onclick .我理解得很好(只需更改 .className),并且它有效
我从access导入了一个数据库到mysql,但其中一个表的列名“股数”带有空格,但我尝试更改、替换甚至删除列名,但失败了。任何人都可以帮助解决这一问题 String UpdateQuary = "U
我正在做一个随机的学校元素。 目前,我有一个包含两个 CSS 的页面。一种用于正常 View ,一种用于残障人士 View 。 此页面还包括两个按钮,它们将更改使用的样式表。 function c
我需要使用 javascript 更改 HTML 元素中的文本,但我不知道该怎么做。 ¿有什么帮助吗? 我把它定义成这样: Text I want to change. 我正在尝试这样做: docum
我在它自己的文件 nav_bar.shtml 中有一个主导航栏,每个其他页面都包含该导航栏。这个菜单栏是一个 jQuery 菜单栏(ApyCom 是销售这些导航栏的公司的名称)。导航栏上的元素如何确定
我正在摆弄我的代码,并开始想知道这个变化是否来自: if(array[index] == 0) 对此: if(!array[index] != 0) 可能会影响任何代码,或者它只是做同样的事情而我不需
我一直在想办法调整控制台窗口的大小。这是我正在使用的函数的代码: #include #include #define WIDTH 70 #define HEIGHT 35 HANDLE wHnd;
我有很多情况会导致相同的消息框警报。 有没有比做几个 if 语句更简单/更好的解决方案? PRODUCTS BOX1 BOX2 BOX3
我有一个包含这些元素的 XELEMENT B Bob Petier 19310227 1 我想像这样转换前缀。 B Bob Pet
我使用 MySQL 5.6 遇到了这种情况: 此查询有效并返回预期结果: select * from some_table where a = 'b' and metadata->>"$.countr
我想知道是否有人知道可以检测 R 中日期列格式的任何中断的包或函数,即检测日期向量格式更改的位置,例如: 11/2/90 12/2/90 . . . 15/Feb/1990 16/Feb/1990 .
我希望能够在小部件显示后更改 GtkButton 的标签 char *ButtonStance == "Connect"; GtkWidget *EntryButton = gtk_button_ne
我正在使用 Altera DE2 FPGA 开发板并尝试使用 SD 卡端口和音频线路输出。我正在使用 VHDL 和 C 进行编程,但由于缺乏经验/知识,我在 C 部分遇到了困难。 目前,我可以从 SD
注意到这个链接后: http://www.newscientist.com/blogs/nstv/2010/12/best-videos-of-2010-progress-bar-illusion.h
我想知道在某些情况下,即使剧本任务已成功执行并且 ok=2,ansible 也会显示“changed=0”。使用 Rest API 和 uri 模块时会发生这种情况。我试图找到解释但没有成功。谁能告诉
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: add buttons to push notification alert 是否可以在远程通知显示的警报框中指定有
当您的 TabBarController 中有超过 5 个 View Controller 时,系统会自动为您设置一个“更多” View 。是否可以更改此 View 中导航栏的颜色以匹配我正在使用的颜
如何更改.AndroidStudioBeta文件夹的位置,默认情况下,该文件夹位于Windows中的\ .. \ User \ .AndroidStudioBeta,而不会破坏任何内容? /编辑: 找
我目前正在尝试将更具功能性的编程风格应用于涉及低级(基于 LWJGL)GUI 开发的项目。显然,在这种情况下,需要携带很多状态,这在当前版本中是可变的。我的目标是最终拥有一个完全不可变的状态,以避免状
我是一名优秀的程序员,十分优秀!