我正在学习Java中的套接字,我只是错过了如何从服务器接收回来的响应 .
在How to send string array object和How to send and receive serialized object in socket channel之后,我试图让用户根据自己的选择选择:
1 - 2 - 3 - 4
然后我想拆分并将它们作为一个数组发送到服务器,服务器应该发送回用户选择的数量 .
例如,如果用户选择
2 3 4 1 2 3 4 1
服务器应该返回
8
服务器发送响应很好,但在客户端我收到错误:
线程“main”中的异常java.net.ConnectException:连接被拒绝:在java.net.DualStackPocket上保存的java.net.DualStackPlainSocketImpl.socketConnect(未知来源)中的java.net.DualStackPlainSocketImpl.connect0(本机方法)连接( java.net.SocksSocketImpl.connect上java.net.PlainSocketImpl.connect(未知来源)java.net.AbstractPlainSocketImpl.connect(未知来源)的java.net.AbstractPlainSocketImpl.connectToAddress(未知来源)(未知来源)来自java.net.Socket.connect(未知源)的java.net.Socket.connect(未知源)位于java.net.Socket . (未知源),位于ClientClass的java.net.Socket . (未知源) . 主(ClientClass.java:26)
我不确定为什么会这个问题 . 有帮助吗?
我的客户:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Scanner;
public class ClientClass {
public static void main(String args[]) throws IOException, ClassNotFoundException
{
// take order and convert it to array of choices
Scanner myScanner = new Scanner(System.in); // take from user
System.out.println("Enter all your choices seperated by space:");
System.out.println("Choices are: 1- 2- 3- 4");
String orderString = myScanner.next();
orderString += myScanner.nextLine();
String orderArray[] = orderString.split(" ");
// send request to server
Socket mySocket = new Socket("127.0.0.1", 4444); // create a socket
ObjectOutputStream out = new ObjectOutputStream(mySocket.getOutputStream());
out.writeObject(orderArray);
// get response from server
InputStream is = mySocket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String message = br.readLine();
System.out.println("Message received from the server : " +message);
}
}
我的服务器:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.channels.SocketChannel;
import java.util.Scanner;
public class ServerClass {
public static void main(String args[]) throws IOException, ClassNotFoundException
{
// receive
ServerSocket myServerSocket = new ServerSocket(4444); // create a server socket
Socket mySimpleSocket = myServerSocket.accept(); // accept requests
ObjectInputStream ois = new ObjectInputStream(mySimpleSocket.getInputStream());
String[] choices = (String[]) ois.readObject();
// send back response
OutputStream os = mySimpleSocket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
bw.write(choices.length);
System.out.println("Message sent to the client is "+choices.length);
bw.flush();
}
}
1 回答
垃圾 . 服务器甚至没有获得传入连接,更不用说读取请求,更不用说发送响应了 .
根据这个证据,服务器甚至没有运行 . 当然不能在与客户端相同的主机上运行,这是
new Socket("127.0.0.1", 4444)
所要求的 .