两端通信A端不停发送字符串携带帧1-4, B端接收,接收失败(模拟产生失败)告知A端,A端从新发送。
4失败的话A端没有反映,而却同步也有点异常,待高人指点一二,小弟不甚感激。
import java.net.*;
import java.io.*;
import java.util.*;
public class Server {
public static void main(String[] args) throws Exception{
/*
 * 创建服务端,启动服务线程
 */
List<Socket> sockets=new ArrayList<Socket>();
ServerSocket ss=new ServerSocket(9000);
System.out.println("启动服务成功!");
while(true){
Socket s=ss.accept();
sockets.add(s);
Thread t=new ServerThread(s,sockets);
t.start();
}
}
}class ServerThread extends Thread{
private Socket s;
private List<Socket> sockets;
public ServerThread(Socket s, List<Socket> sockets) {
super();
this.s = s;
this.sockets = sockets;
}
/* 
 * 创建服务线程,实现run()方法
 */
public void run() {
try {


BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
while(true){
String text=in.readLine();
if (text==null) break;
Iterator<Socket> it=sockets.iterator();
int i=(int)(Math.random()*10);
while(it.hasNext()){
Socket s2=(Socket)it.next();
PrintWriter out=new PrintWriter(s2.getOutputStream());

if(i==0||i==1||i==2||i==3){
out.println(text+"error");
out.flush();
int tn=Integer.parseInt(text.substring(3,4));
for(int tin=tn;tin<=4;tin++){
System.out.println(tin+"号帧接收失败!");
}
System.out.println("等待对方重新发送...");
try {
Thread.sleep(3000);
break;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else{
System.out.println(text.substring(3,4)+"号帧接收成功!");
}

}
}
} catch (IOException e) {
}
/*
 *线程关闭的时候一定要关闭端口,避免不必要的占用。 
 */
finally{
sockets.remove(s);
try {
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

}
========================================================================================import java.net.*;
import java.io.*;public class Client extends Thread {

private Socket s;
private BufferedReader in;
private PrintWriter out;

public void run() {
try{
s=new Socket("127.0.0.1",9000);
out=new PrintWriter(s.getOutputStream());
in=new BufferedReader(
new InputStreamReader(
s.getInputStream()));

BufferedReader in1 = new BufferedReader(
new InputStreamReader(System.in));

System.out.print("发送信息 >");
String s=in1.readLine();

for(int i=1;i<=4;i++){
System.out.println("帧号:"+Integer.toString(i)+" 发送信息:"+Integer.toString(i)+s);
out.println("帧号:"+Integer.toString(i)+" 发送信息:"+Integer.toString(i)+s);
out.flush();
}
System.out.println("等待对方响应...");
Thread.sleep(3000);

if(!receive().equals("error")){
int num=Integer.parseInt(receive().substring(3,4))-1;
for(int i1=num;i1<=4;i1++){
System.out.println("帧号:"+Integer.toString(i1)+" 发送信息:"+Integer.toString(i1)+s);
out.println("帧号:"+Integer.toString(i1)+" 发送信息:"+Integer.toString(i1)+s);
}
out.flush();
}
}catch(Exception e){

}
}

public String receive() throws IOException { 
        return in.readLine(); 
    } 
public static void main(String[] args) {
Client s=new Client();
while(true){
try{
s.start();
}catch(Exception e){

}
}

}}