サーバーとクライアントのコードをJavaで作成しました。クライアントはサーバーからファイルをダウンロードでき、サーバーは同時にクライアントにファイルを提供できる必要があります。この目的のために、私はサーバーでマルチスレッドを使用しました。
1つのクライアントでは完全に正常に機能していますが、すべてのクライアントでスレッドを使用している間、私のコードでは正しく機能していないようです。
ファイルが正しくダウンロードされていないため、破損しており、クライアントごとにサイズが異なります。
クライアントから受け入れた後、サーバーのファイルコードを提供するための新しいスレッドを作成しています-
public static void send(String pathname) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException
{
try
{
System.out.println("....");
byte[] buf = new byte[1024];
OutputStream os = sock.getOutputStream();
//PrintWriter writer = new PrintWriter(os);
System.out.println("...11.");
BufferedOutputStream out = new BufferedOutputStream(os, 1024);
int i=0;
System.out.println("hi1");
File fp = new File(pathname);
System.out.println("hi2");
RandomAccessFile ra = new RandomAccessFile(fp,"r");
System.out.println("hi3");
long bytecount=1024;
////////////////
while((i=ra.read(buf, 0, 1024)) != -1)
{
System.out.println("hi");
bytecount += 1024;
System.out.println("hi6");
out.write(buf, 0, i);
System.out.println("hi7");
out.flush();
}
System.out.println("bye");
//os.flush();
//out.close();
ra.close();
//sock.close();
}
catch(IOException ex)
{
}
}
そして、ファイル受信用のクライアントのコードは
public void run() {
try{
byte[] b = new byte[1024];
int len = 0;
long bytcount = 1024;
File fp = new File(path);
RandomAccessFile ra=new RandomAccessFile(fp,"rw");
ra.seek(0);
InputStream is = sock.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(is));
while ((len = is.read(b, 0, 1024)) != -1) {
bytcount = bytcount + 1024;
//decrypt
ra.write(b, 0, len);
}
//is.close();
//ra.close();
//sock.close();
}
catch(IOException ex){
ex.printStackTrace();
}
// throw new UnsupportedOperationException("Not supported yet.");
}
}
私はここで何が悪いのかを理解していません。事前に多くの感謝を助けてください