service.java
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import ThreadPg.*;
public class service {
private ServerSocket server;
private Executor Pool;
public static void main(String[] args) throws Exception{
service ser = new service(99, 1000);
ser.startserver();
}
public service(int Port,int PoolSize) {
try {
server = new ServerSocket(99);
Pool = Executors.newFixedThreadPool(PoolSize);
} catch (Exception e) {
e.printStackTrace();
}
}
public void startserver() {
try {
while(true) {
Socket socket = server.accept();
Pool.execute(new BgThread(socket));
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
BgThread.java
package ThreadPg;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.net.Socket;
public class BgThread implements Runnable{
private Socket s;
public BgThread(Socket s) {
super();
this.s = s;
}
@Override
public void run() {
try {
InputStream input = s.getInputStream();
InputStreamReader inputread = new InputStreamReader(input);
OutputStream output = s.getOutputStream();
char[] ch = new char[8192];
int len;
String rep = "Recv your Msg.";
while((len = inputread.read(ch)) != -1) {
String r = new String(ch,0,len);
System.out.println("Recv: " +r);
output.write(rep.getBytes());
output.close();
}
inputread.close();
input.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
client.java
import java.io.*;
import java.util.*;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.net.*;
import ThreadPg.*;
public class client {
private static boolean f;
public static void main(String[] args) throws Exception{
String Address = "192.168.159.128";
int Port = 99;
f = true;
Thread clientread = new Thread(new Runnable() {
public void run() {
try {
Socket s = new Socket(Address,Port);
InputStream input = s.getInputStream();
byte[] ch = new byte[8192];
int len;
while((len = input.read(ch)) != -1) {
System.out.println("Recv from server: " + new String(ch,0,len));
s.close();
f = false;
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
);
Thread clientwrite = new Thread(new Runnable() {
public void run() {
try {
Socket s = new Socket(Address,Port);
OutputStream output = s.getOutputStream();
String outmess = null;
Scanner scan = new Scanner(System.in);
System.out.print("Msg: ");
if(scan.hasNext()) {
outmess = scan.nextLine();
}
byte[] out = outmess.getBytes();
output.write(out);
output.flush();
output.close();
s.close();
f = false;
} catch(Exception e) {
e.printStackTrace();
}
}
});
if(f = true) {
clientread.start();
clientwrite.start();
}
else if(f = false) {
clientread.interrupt();
clientwrite.interrupt();
clientread.start();
clientwrite.start();
}
}
}
各位博主,请问如何修改上述代码才能使客户端消息能多次发送,现在的测试效果为发送一次后服务的立即就可以接收,但客户端却不能再发送消息了。