我通过套接字编程了多连接(客户端-服务器)
连接多台服务器时, 文件未传输,但客户端显示错误消息。 我应该在您的客户端中使用线程吗?
client.java
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class client {
public static void main(String[] args) {
try {
while (true) {
Socket sock = new Socket("192.168.0.77", 9999);
// Socket sock = new Socket("127.0.0.1", 9999);
// Socket sock = new Socket("127.0.0.1", 9999);
System.out.println("connection");
Scanner scan = new Scanner(System.in);
System.out.print("file name : ");
String fileName = scan.next();
File f = new File(fileName);
DataOutputStream dos = new DataOutputStream(sock.getOutputStream());
dos.writeUTF(f.getName());
dos.flush();
byte b[] = new byte[1024];
int n = 0;
FileInputStream fis = new FileInputStream(fileName);
long fileSize = 0;
while ((n = fis.read(b)) != -1) {
dos.write(b, 0, n);
fileSize += n;
}
System.out.println("Transfer completed");
dos.close();
fis.close();
sock.close();
}
} catch (UnknownHostException ue) {
//System.out.println(ue.getMessage());
} catch (IOException ie) {
System.out.println(ie.getMessage());
}
}
}
server.java
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class server {
public static void main(String[] args) {
ServerSocket server = null;
// final int Server_port = 9999;
DataInputStream dis = null;
String fileName = null;
FileOutputStream fos = null;
try {
/*
* server = new ServerSocket(); String localHostAddress =
* InetAddress.getLocalHost().getHostAddress(); server.bind(new
* InetSocketAddress(localHostAddress, Server_port));
* System.out.println("[server] binding \naddress : " + localHostAddress +
* ", port : " + Server_port);
*/
/*
* InetSocketAddress remoteSocketAddress = (InetSocketAddress)
* socket.getRemoteSocketAddress(); String remoteHostName =
* remoteSocketAddress.getAddress().getHostAddress(); int remoteHostPort =
* remoteSocketAddress.getPort();
* System.out.println("[server] connected! \nconnected socket address:" +
* remoteHostName + ", port:" + remoteHostPort);
*/
while (true) {
server = new ServerSocket(9999);
AcceptThread acceptThread = new AcceptThread (server);
System.out.println("wait");
Socket sock = server.accept();
System.out.println("Client accept");
new Thread(acceptThread).start();
dis = new DataInputStream(sock.getInputStream());
// if (dis.available() > 0) {
fileName = dis.readUTF();
fos = new FileOutputStream(fileName);
byte[] b = new byte[1024];
int n = 0;
long fileSize = 0;
while ((n = dis.read(b)) != -1) {
fos.write(b, 0, n);
fileSize += n;
}
System.out.println("accepted");
fos.close();
dis.close();
sock.close();
server.close();
}
// }
} catch (IOException ie) {
System.out.println(ie.getMessage());
}
}
}
AcceptThread.class
import java.net.*;
public class AcceptThread extends Thread {
ServerSocket server;
Socket sock;
public AcceptThread(ServerSocket server) {
this.server = server;
}
@Override
public void run() {
while (true) {
try {
sock = server.accept();
System.out.println("connected client" + sock);
} catch (Exception e) {
}
}
}
}
它给我客户端一个错误
Connection reset by peer: socket write error
我想知道如何将多客户端连接到服务器
您能否提供链接或一些提示/示例?