很久没写socket哪个高手帮小弟解决一下,感激不尽,我是想服务端一直监听,当有客服端连接进来的时候就发送一个确认信息,当客户端收到的时候就发送文件给服务端 ,服务端接收完毕以后再给客户端一个信息,以便客户端处理其他的事情,就这么简单,客户端:import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.net.Socket;
import java.net.UnknownHostException;
public class AllSocketClient extends Thread {
public static void main(String[] args) {
AllSocketClient x = new AllSocketClient();
x.start();
}
public void run(){
Socket theSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
theSocket = new Socket("", 12345);
in = new BufferedReader(
new InputStreamReader(theSocket.getInputStream()));
out = new PrintWriter(theSocket.getOutputStream());
String fromUser, fromServer;
while(true){
char[] temps = new char[4];
in.read(temps);
// fromServer = in.readLine();
fromServer = in.toString();
if(fromServer.equals("bye"))
break;
else if(fromServer.equals("Hi")){
System.out.println(fromServer);
InputStream fileInput = new FileInputStream(new File("d:/1.exe"));
OutputStream fileOutput = new DataOutputStream(
new BufferedOutputStream(theSocket.getOutputStream()));
byte[] buf = new byte[2048];
int num = fileInput.read(buf);
while(num != -1){
fileOutput.write(buf, 0, num);
fileOutput.flush();
num = fileInput.read(buf);
}
fileInput.close();
fileOutput.close();
}
if(fromServer.equals("OK")){
out.close();
in.close();
theSocket.close();
break;
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
} 服务端:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
public class AllSocketServer extends Thread{
private Socket socket;
public AllSocketServer(Socket socket){
this.socket = socket;
start();
}
public void run() {
try {
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(
new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
out.println("Hi");
// while(true){
File newFile = new File("f:/1.exe");
newFile.createNewFile();
RandomAccessFile raf = new RandomAccessFile(newFile, "rw");
InputStream fileInput = new DataInputStream(
new BufferedInputStream(socket.getInputStream()));
byte[] buf = new byte[2048];
int num = fileInput.read(buf);
while(num != -1){
raf.write(buf, 0, num);
raf.skipBytes(num);
num = fileInput.read(buf);
}
in.close();
raf.close();
if(num == -1){
out.print("OK");
System.out.println("queding");
// break;
}
// }
// in.close();
// out.close();
System.out.println("Disconnected from " + socket.getRemoteSocketAddress());
// socket.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(12345);
System.out.println("Server Started");
try {
while(true){
Socket theSocket = serverSocket.accept();
try {
new AllSocketServer(theSocket);
} catch (Exception e) {
e.printStackTrace();
theSocket.close();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(serverSocket != null) {}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货