初学java,刚学到网络这节,试着写了个服务器端和客户端,调试了下,总是输出不了。大家看看要怎么修改,谢谢。import java.net.*;
import java.io.*;
public class TestSever{ public static void main(String[] args) throws Exception{ ServerSocket a=new ServerSocket(8888); while(true){ Socket s=a.accept(); System.out.println("a client connect!"); InputStream x=s.getInputStream(); InputStreamReader p=new InputStreamReader(x); BufferedReader h=new BufferedReader(p); System.out.println(h.readLine()); h.close(); p.close(); x.close();
}
}
}
import java.net.*;
import java.io.*;public class TestClient{ public static void main(String[] args) throws Exception{ Socket s=new Socket("127.0.0.1",8888); OutputStream w=s.getOutputStream(); BufferedOutputStream q=new BufferedOutputStream(w);
String l; InputStreamReader c=new InputStreamReader(System.in); BufferedReader d=new BufferedReader(c); while(true){ l=d.readLine(); System.out.println(d.readLine()); q.write(l.getBytes(),0,l.length()-1);
} q.close(); }
}
import java.io.*;
public class TestSever{ public static void main(String[] args) throws Exception{ ServerSocket a=new ServerSocket(8888); while(true){ Socket s=a.accept(); System.out.println("a client connect!"); InputStream x=s.getInputStream(); InputStreamReader p=new InputStreamReader(x); BufferedReader h=new BufferedReader(p); System.out.println(h.readLine()); h.close(); p.close(); x.close();
}
}
}
import java.net.*;
import java.io.*;public class TestClient{ public static void main(String[] args) throws Exception{ Socket s=new Socket("127.0.0.1",8888); OutputStream w=s.getOutputStream(); BufferedOutputStream q=new BufferedOutputStream(w);
String l; InputStreamReader c=new InputStreamReader(System.in); BufferedReader d=new BufferedReader(c); while(true){ l=d.readLine(); System.out.println(d.readLine()); q.write(l.getBytes(),0,l.length()-1);
} q.close(); }
}
解决方案 »
- 学习JAVA WEB的 一般步骤是什么啊?我现在学了j2se 看网上说JDSC Spring Hibniter 还有好多,感觉比较乱,
- 关于javax.servlet.jsp.tagextTagSupport源代码导入的问题
- 局域网中两台计算机通过socket通信,怎么连接时间竟然这么长?
- swing 比如 一个JButton 如何让这个button的文本信息显示在添加的图片上,而不是图片的旁边
- 怎么样取得已知用户名和密码的网页的内容
- 请问文件续写的函数是什么?
- 小问题!!!
- JAVA版的兄弟,我要学JAVA了,大家给我指点迷津吧,如何入门呀!!!编辑工具哪个最牛!
- javacc,有研究过的朋友给介绍介绍,谢了
- 请教:JavaMail的的问题
- jar文件
- setDataList 之后怎么处理
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server{ public static void main(String[] args) throws Exception{ ServerSocket a=new ServerSocket(8888); while(true){ Socket s=a.accept(); System.out.println("a client connect!"); InputStream x=s.getInputStream(); InputStreamReader p=new InputStreamReader(x); BufferedReader h=new BufferedReader(p); System.out.println(h.readLine()); h.close(); p.close(); x.close();
}
}
}Clientpackage test;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;public class Client{ public static void main(String[] args) throws Exception{ Socket s=new Socket("127.0.0.1",8888); OutputStream w=s.getOutputStream(); PrintWriter out = new PrintWriter(w);
String l; Scanner scanner = new Scanner(System.in);//控制台输入 while(true){ l=scanner.next(); System.out.println(l);
if(l == null) {
break;
} out.println(l);
out.flush();
} out.close(); }
}可以了 不过这个代码还是有问题的,楼主要清楚几个会阻塞的地方,accept会阻塞,同时读写都会阻塞,所以这个程序,在服务器端读取那里阻塞的时候,是不会accept新的客户端的,同时读取完一次后,循环到accept阻塞住了,这是时就不会接受新的输入了。应该用线程解决这个问题。
以下的读取从客户端传过来的字符串,都在这个线程去做,
然后while(true)就又可以回来,继续Socket s=a.accept();
如果LZ这样做,如果第一个客户端连进来,然后一直不输入字符串的话,
那么其他的客户端也不会有用了。
你的客户端程序:
BufferedReader d=new BufferedReader(c); while(true){ l=d.readLine(); System.out.println(d.readLine());//这句我想你是要输入从控制台输入的字符串,那么不应该用d.readLine(),用l 就可以了。 q.write(l.getBytes(),0,l.length()-1);
} q.close();//这句 永远走不到。 }