public class Client {
private Socket socket;
private DataOutputStream out = null;
private Writer writer;
public Client(Writer writer) { // get all stats in the client class
this.writer = writer;
}
public void connectToServer()
{
// establish a connection
try
{
System.out.println("Connecting...");
socket = new Socket("39.32.42.65", 4003);
System.out.println("Connected");
// sends output to the socket
out = new DataOutputStream(socket.getOutputStream());
}
catch(UnknownHostException u)
{
System.out.println(u);
}
catch(IOException i)
{
System.out.println(i);
}
try
{
this.writer.transferStats(out); // send all stats to back end server
out.writeUTF("Over"); // finish sending
}
catch(IOException i)
{
System.out.println(i);
}
try
{
out.close();
socket.close();
}
catch(IOException i)
{
System.out.println(i);
}
}
}
这是上面的客户端代码^
package com.clxpr.demo;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import org.springframework.context.ConfigurableApplicationContext;
import com.clxpr.demo.service.CpuDataService;
import com.clxpr.demo.service.DiskDataService;
import com.clxpr.demo.service.IoDataService;
import com.clxpr.demo.service.MemDataService;
import com.clxpr.demo.service.PidDataService;
import com.clxpr.demo.service.PidSchedDataService;
import com.clxpr.demo.service.ResourceDataService;
import com.clxpr.demo.service.ResourceService;
public class LinuxListener implements Runnable {
private ConfigurableApplicationContext springContext;
private ServerSocket server;
private ResourceService resourceServ;
private ResourceDataService resourceDataServ;
private CpuDataService cpuDataServ;
private DiskDataService diskDataServ;
private IoDataService ioDataServ;
private MemDataService memDataServ;
private PidDataService pidDataServ;
private PidSchedDataService pidSchedDataServ;
// Constructor to get objects of services managed by java spring
public LinuxListener(ConfigurableApplicationContext springContext) throws IOException {
// TODO Auto-generated constructor stub
this.springContext=springContext;
this.resourceServ=springContext.getBean("ResourceService",ResourceService.class);
this.resourceDataServ=springContext.getBean("ResourceDataService",ResourceDataService.class);
this.cpuDataServ = springContext.getBean("CpuDataService",CpuDataService.class);
this.diskDataServ = springContext.getBean("DiskDataService",DiskDataService.class);
this.ioDataServ = springContext.getBean("IoDataService",IoDataService.class);
this.pidDataServ = springContext.getBean("PidDataService",PidDataService.class);
this.pidSchedDataServ = springContext.getBean("PidSchedDataService",PidSchedDataService.class);
this.memDataServ = springContext.getBean("MemDataService",MemDataService.class);
server = new ServerSocket(4003); // create server socket for client to connect to
}
public ConfigurableApplicationContext getContext() {
return this.springContext;
}
@Override
public void run() {
int usrId = 1;
while(true) {
try {
System.out.println("Server started");
System.out.println("Waiting for a client ...");
Socket socket = server.accept();
System.out.println("Client accepted");
// takes input from the client socket
DataInputStream in = new DataInputStream(
new BufferedInputStream(socket.getInputStream()));
Thread t = new ClientHandler(socket,in,this.resourceServ,this.resourceDataServ,this.cpuDataServ,this.diskDataServ,
this.ioDataServ,this.memDataServ,this.pidDataServ,this.pidSchedDataServ, usrId);
t.start();
}
catch(IOException i)
{
System.out.println(i);
}
usrId++;
}
}
}
这是上面的服务器代码^
给出的ip是我拥有的公共ip。客户端代码在aws ec2示例linux env上,它没有与服务器连接。当我在同一个网络上运行它们时,它会连接起来。我更改了路由器上的设置,以在nat下启用端口4000到4005。
1条答案
按热度按时间mzaanser1#
您可能需要检查vpc网络ACL,尤其是出站部分。
如果我搞清楚了,你就把4000号端口转发到4005号端口。
您确定已将服务器绑定到路由器ip吗?
你的路由器上是否有某种防火墙可以阻止外部IP?
最后但并非最不重要的一点,您是否考虑过您的windows防火墙可能阻止了您的外部请求?
谨致问候