JAVA SE.docx
- 文档编号:11935261
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:39
- 大小:58.23KB
JAVA SE.docx
《JAVA SE.docx》由会员分享,可在线阅读,更多相关《JAVA SE.docx(39页珍藏版)》请在冰豆网上搜索。
JAVASE
JavaSE02Day04
Top
1.DMS网络原型——HelloWorld
2.DMS网络原型——服务端多线程技术
3.DMS网络原型——服务端线程池技术及客户端出错重传技术
4.DMS网络原型——服务端缓冲队列
1DMS网络原型——HelloWorld
1.1问题
使用Java的Socket实现客户端和服务器端通信。
通信过程如下表所示:
客户端与服务器端通信过程
1.2方案
新建类ServerDemo表示服务器端,新建类ClientDemo表示客户端。
首先服务器端创建ServerSocket对象,设置服务的端口。
1.publicServerDemo(){
2. try{
3. ss=newServerSocket(port);
4. }catch(Exceptione){
5. e.printStackTrace();
6. thrownewRuntimeException("",e);
7. }
8. }
服务器端建立Socket等待客户端连接,并建立相应Socket的输入输出流。
1.Socketsocket=ss.accept();
2. InputStreamis=socket.getInputStream();
3. OutputStreamos=socket.getOutputStream();
4. PrintWriterwriter=newPrintWriter(os);
5. BufferedReaderreader=newBufferedReader(newInputStreamReader(is));
客户端建立Socket,创建相应Socket的输入输出流,向服务器发送信息:
“你好,服务器!
”。
1.socket=newSocket("localhost",8888);
2. InputStreamis=socket.getInputStream();
3. OutputStreamos=socket.getOutputStream();
4. PrintWriterwriter=newPrintWriter(os);
5. BufferedReaderreader=newBufferedReader(newInputStreamReader(is));
6. //1
7. writer.println("你好,服务器!
");
8. writer.flush();
服务器端接收客户端信息。
1.//1
2. Stringline=reader.readLine();
3. System.out.println(line);
服务器端发送“你好,客户端!
”。
1.//2
2. writer.println("你好,客户端!
");
3. writer.flush();
客户端接收信息。
1.//2
2. Stringline=reader.readLine();
3. System.out.println(line);
客户端发送“再见,服务器!
”。
1.//3
2. writer.println("再见,服务器!
");
3.writer.flush();
服务器端接收客户端信息。
1. //3
2. line=reader.readLine();
3. System.out.println(line);
服务器发送“再见,客户端!
”。
1.//4
2. writer.println("再见,客户端!
");
3. writer.flush();
客户端接收信息。
1.//4
2. line=reader.readLine();
3. System.out.println(line);
1.3实现
系统代码实现如下:
ServerDemo类代码如下:
1.publicclassServerDemo{
2. privateServerSocketss;
3. privateintport=8888;
4. publicServerDemo(){
5. try{
6. ss=newServerSocket(port);
7. }catch(Exceptione){
8. e.printStackTrace();
9. thrownewRuntimeException("",e);
10. }
11. }
12. publicvoidstart(){
13. try{
14. //监听服务器端口,等待客户端的连接
15. System.out.println("等待客户端连接");
16. Socketsocket=ss.accept();
17. InputStreamis=socket.getInputStream();
18. OutputStreamos=socket.getOutputStream();
19. PrintWriterwriter=newPrintWriter(os);
20. BufferedReaderreader=newBufferedReader(
21. newInputStreamReader(is));
22. //1
23. Stringline=reader.readLine();
24. System.out.println(line);
25. //2
26. writer.println("你好,客户端!
");
27. writer.flush();
28. //3
29. line=reader.readLine();
30. System.out.println(line);
31. //4
32. writer.println("再见,客户端!
");
33. writer.flush();
34. socket.close();
35. }catch(Exceptione){
36. e.printStackTrace();
37. }
38. }
39. publicstaticvoidmain(String[]args){
40. System.out.println("ServerDemo...");
41. ServerDemoserverDemo=newServerDemo();
42. serverDemo.start();
43. }
44.}
ClientDemo类代码如下:
1.publicclassClientDemo{
2. privateSocketsocket;
3. publicvoidsend(){
4. try{
5. System.out.println("连接服务器...");
6. socket=newSocket("localhost",8888);
7. InputStreamis=socket.getInputStream();
8. OutputStreamos=socket.getOutputStream();
9. PrintWriterwriter=newPrintWriter(os);
10. BufferedReaderreader=newBufferedReader(
11. newInputStreamReader(is));
12. //1
13. writer.println("你好,服务器!
");
14. writer.flush();
15. //2
16. Stringline=reader.readLine();
17. System.out.println(line);
18. //3
19. writer.println("再见,服务器!
");
20. writer.flush();
21. //4
22. line=reader.readLine();
23. System.out.println(line);
24. }catch(Exceptione){
25. e.printStackTrace();
26. thrownewRuntimeException("",e);
27. }
28. }
29. publicstaticvoidmain(String[]args){
30. System.out.println("ClientDemo...");
31. ClientDemoclientDemo=newClientDemo();
32. clientDemo.send();
33. }
34.}
1.4扩展
在DMS网络原型——HelloWorld中,已经完成了客户端和服务器端的通信,现需要继续进行通信,通信过程如下表所示。
客户端与服务器端通信过程
ServerDemo类代码如下:
1.publicclassServerDemo{
2. privateServerSocketss;
3. privateintport=8888;
4. publicServerDemo(){
5. try{
6. ss=newServerSocket(port);
7. }catch(Exceptione){
8. e.printStackTrace();
9. thrownewRuntimeException("",e);
10. }
11. }
12. publicvoidstart(){
13. try{
14. //监听服务器端口,等待客户端的连接
15. System.out.println("等待客户端连接");
16. Socketsocket=ss.accept();
17. InputStreamis=socket.getInputStream();
18. OutputStreamos=socket.getOutputStream();
19. PrintWriterwriter=newPrintWriter(os);
20. BufferedReaderreader=newBufferedReader(
21. newInputStreamReader(is));
22. //1
23. Stringline=reader.readLine();
24. System.out.println(line);
25. //2
26. writer.println("你好,客户端!
");
27. writer.flush();
28. //3
29. line=reader.readLine();
30. System.out.println(line);
31. //4
32. writer.println("再见,客户端!
");
33. writer.flush();
34. /**
35. *扩展部分
36. */
37. StringmyName=reader.readLine();
38. System.out.println(myName+"来了!
");
39. writer.println("你好,"+myName);
40. writer.flush();
41. socket.close();
42. }catch(Exceptione){
43. e.printStackTrace();
44. }
45. }
46. publicstaticvoidmain(String[]args){
47. System.out.println("ServerDemo...");
48. ServerDemoserverDemo=newServerDemo();
49. serverDemo.start();
50. }
51.}
ClientDemo类完整代码如下:
1.publicclassClientDemo{
2. privateSocketsocket;
3. publicvoidsend(){
4. try{
5. System.out.println("连接服务器...");
6. socket=newSocket("localhost",8888);
7. InputStreamis=socket.getInputStream();
8. OutputStreamos=socket.getOutputStream();
9. PrintWriterwriter=newPrintWriter(os);
10. BufferedReaderreader=newBufferedReader(
11. newInputStreamReader(is));
12. //1
13. writer.println("你好,服务器!
");
14. writer.flush();
15. //2
16. Stringline=reader.readLine();
17. System.out.println(line);
18. //3
19. writer.println("再见,服务器!
");
20. writer.flush();
21. //4
22. line=reader.readLine();
23. System.out.println(line);
24. /**
25. *扩展部分
26. */
27. StringmyName="李大神仙";
28. writer.println(myName);
29. writer.flush();
30. line=reader.readLine();
31. System.out.println(line);
32. }catch(Exceptione){
33. e.printStackTrace();
34. thrownewRuntimeException("",e);
35. }
36. }
37. publicstaticvoidmain(String[]args){
38. System.out.println("ClientDemo...");
39. ClientDemoclientDemo=newClientDemo();
40. clientDemo.send();
41. }
42.}
2DMS网络原型——服务端多线程技术
2.1问题
如何实现多个客户端连接同一个服务器。
通信过程如下表所示:
客户端与服务器端通信过程
客户端A,B,C...可以同时去连接服务器,和服务器进行通信。
2.2方案
创建ServerSocket类,在该类的构造方法中,创建ServerSocket对象,设立服务的端口。
1. publicServerDemo(){
2. try{
3. ss=newServerSocket(port);
4. }catch(Exceptione){
5. e.printStackTrace();
6. thrownewRuntimeException("",e);
7. }
8. }
在SeverSocket类中,添加内部类Handler,实现Runnable接口,覆盖线程体run方法,在线程体中实现发送和接收信息。
1.privateclassHandlerimplementsRunnable{
2. privateSocketsocket;
3. @Override
4. publicvoidrun(){
5. try{
6. InputStreamis=socket.getInputStream();
7. OutputStreamos=socket.getOutputStream();
8. PrintWriterwriter=newPrintWriter(os);
9. BufferedReaderreader=
10.newBufferedReader(newInputStreamReader(is));
11. StringmyName=reader.readLine();
12. System.out.println(myName+"来了!
");
13. writer.println("你好,"+myName);
14. writer.flush();
15. socket.close();
16. }catch(IOExceptione){
17. e.printStackTrace();
18. thrownewRuntimeException("",e);
19. }
20. }
21. Handler(Socketsocket){
22. this.socket=socket;
23. }
24. }
在SeverSocket类中创建start方法,在该方法中,创建循环,等待多个客户端的连接,启动Handler类对应的线程。
1. publicvoidstart(){
2. while(true){
3. try{
4. Socketsocket=ss.accept();
5. ThreadclientThread=newThread(newHandler(socket));
6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA SE