未通过转发路由器上的端口号将路由器配置为不接受客户端和服务器之间的此连接肯定会导致此错误,因此应该执行此操作.(如何在路由器上设置端口转发,具体取决于路由器类型)(您也可以查看此视频)I have a server and a client in Java, both work in localhost or with my machine IP, but when I tells a IP from another computer in my local network, it tells "Exception occurred: Connection refused: connect"! Here is my code:ChatClient.javapackage programmingchat;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.File;import java.io.IOException;import java.io.InputStreamReader;import java.net.Socket;import java.net.UnknownHostException;import java.util.Scanner;public class ChatClient { private Socket socket; private Scanner console; private DataOutputStream output; private BufferedReader reader; public ChatClient(String serverName, int serverPort) { try { System.out.println("LiveChat Client 1.1 start."); System.out.println("Trying to connect to " + serverName + " on port " + serverPort + "..."); socket = new Socket(serverName, serverPort); System.out.println("Success!"); console = new Scanner(System.in); output = new DataOutputStream(socket.getOutputStream()); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); Thread t1 = new Thread(){ @Override public void run() { String line = ""; while(!line.equals(".bye")) { try { System.out.print("me: "); line = console.nextLine(); output.writeUTF(line); output.flush(); } catch(IOException e) { e.printStackTrace(); } } } }; Thread t2 = new Thread(){ @Override public void run() { String line = ""; try { while(!(line = reader.readLine()).equals(".bye")) { System.out.print("\nhe: " + line + "\nme: "); } } catch (IOException e) { e.printStackTrace(); } } }; t1.start(); t2.start(); } catch(UnknownHostException e) { System.err.println("Unknown host: " + e.getMessage()); } catch(IOException e) { System.err.println("Exception ocurred: " + e.getMessage()); } catch(Exception e) { e.printStackTrace(); System.exit(-1); } } @SuppressWarnings({ "unused", "resource" }) public static void main(String[] args) throws IOException { File hostsFile = new File("hosts.dat"); if(!hostsFile.exists()) { hostsFile.createNewFile(); FileController.writeFile(hostsFile.getPath(), "localhost\n"); } String hosts = FileController.loadFile("hosts.dat"); String[] h = hosts.split("\n"); System.out.println("Select host by it number, or insert a new one."); System.out.println("Currently avaliable hosts: "); for(int i = 0; i < h.length; i++) { System.out.println(i + ": " + h[i]); } System.out.print("Please provide the IP Address of the server: "); Scanner s = new Scanner(System.in); String hostName = s.nextLine(); if(isInteger(hostName)) { int i = Integer.parseInt(hostName); hostName = h[i]; } else { FileController.writeFile(hostsFile.getPath(), hostName + "\n"); } ChatClient client = new ChatClient("localhost", 9081); } private static boolean isInteger(String str) { boolean is = false; try { Integer.parseInt(str); is = true; } catch(Exception e) { is = false; } return is; }}ChatServer.javapackage programmingchat;import java.io.BufferedInputStream;import java.io.DataInputStream;import java.io.IOException;import java.io.PrintStream;import java.net.ServerSocket;import java.net.Socket;public class ChatServer { private Socket[] sockets; private ServerSocket server; private DataInputStream[] ins; private PrintStream[] outs; private String ln1; private String ln2; public ChatServer(int port) { try { System.out.println("LiveChat Server 0.9 start."); System.out.println("Trying to open port " + port + "..."); server = new ServerSocket(port); System.out.println("Server " + server.getInetAddress().getHostName() + " successfully started!"); System.out.println("Instantiating input and output streams..."); ins = new DataInputStream[2]; outs = new PrintStream[2]; System.out.println("Success!"); System.out.println("Instantiating sockets..."); sockets = new Socket[2]; System.out.println("Success!"); System.out.println("Waiting socket 1 to connect..."); sockets[0] = server.accept(); System.out.println("Success!"); System.out.println("Waiting socket 2 to connect..."); sockets[1] = server.accept(); System.out.println("Success!"); System.out.println("Opening input and output streams..."); open(); System.out.println("Success!"); System.out.println("Initializing input strings..."); ln1 = ""; ln2 = ""; System.out.println("Success!"); Thread r1 = new Thread() { @Override public void run() { try { while(!ln1.equals(".bye")) { ln1 = ins[0].readUTF(); System.out.println("1: " +ln1); outs[1].println(ln1); } System.out.println("Socket 1 disconnect!"); sockets[0].close(); } catch(IOException e) { e.printStackTrace(); } } }; Thread r2 = new Thread() { @Override public void run() { try { while(!ln2.equals(".bye")) { ln2 = ins[1].readUTF(); System.out.println("2: " + ln2); outs[0].println(ln2); } System.out.println("Socket 2 disconnect!"); sockets[1].close(); } catch(IOException e) { e.printStackTrace(); } } }; r1.start(); r2.start(); } catch(Exception e) { e.printStackTrace(); } } public void open() throws IOException { ins[0] = new DataInputStream(new BufferedInputStream(sockets[0].getInputStream())); ins[1] = new DataInputStream(new BufferedInputStream(sockets[1].getInputStream())); outs[0] = new PrintStream(sockets[0].getOutputStream()); outs[1] = new PrintStream(sockets[1].getOutputStream()); } @SuppressWarnings("unused") public static void main(String[] args) { ChatServer chat = new ChatServer(9081); }}Please, someone can help me? 解决方案 Use server's local IP address instead of "localhost"ChatClient client = new ChatClient("localhost", 9081);your server is on different machine, it works if both server and client are on one machine.(How do I find my local (internal) IP address?)Edit:Not configuring router to accept this connection between client and server by forwarding port number on router definitely could cause this error, so you should do this.(How to Set Up Port Forwarding on a Router, it differs according to router type)(You could check also this video) 这篇关于用Java用Socket链接两台计算机的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 1403页,肝出来的..
09-06 07:59