摘要:本文主要介绍了JAVA语言程序设计的单Client与Server的单向通信和双向通信,通过实际的案例,让我们从中学到单Client与Server的单向通信和双向通信的精髓所在,让我们在JAVA语言程序设计这条路上走得更远,更加熟练的完成这些代码。
从Console中读取内容:
Java代码
1. BufferedReader inputReader;
2. // Alt + Shift + z try...catch等快捷键
3. // 从Console读取内容
4. try {
5. inputReader = new BufferedReader(new InputStreamReader(System.in));
6. String inputContent;
7. while (!(inputContent = inputReader.readLine()).equals("bye")) {
8. System.out.println(inputContent);
9. }
10. } catch (Exception e) {
11. e.printStackTrace();
12. }一.单向通信
Client -> Server
SocketClient.java
Java代码
1. import java.io.BufferedReader;
2. import java.io.BufferedWriter;
3. import java.io.IOException;
4. import java.io.InputStreamReader;
5. import java.io.OutputStreamWriter;
6. import java.net.Socket;
7.
8. public class SocketClient {
9.
10. public static void main(String[] args) {
11. SocketClient client = new SocketClient();
12. client.start();
13. }
14.
15. public void start() {
16. BufferedReader inputReader = null;
17. BufferedWriter writer = null;
18. Socket socket = null;
19. // 从Console读取内容
20. try {
21. socket = new Socket("127.0.0.1", 9898);
22. // 从socket进行写入
23. writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
24. inputReader = new BufferedReader(new InputStreamReader(System.in));
25. String inputContent;
26. while (!(inputContent = inputReader.readLine()).equals("bye")) {
27. writer.write(inputContent + "\n");
28. writer.flush();
29. }
30. } catch (Exception e) {
31. e.printStackTrace();
32. } finally {
33. try {
34. writer.close();
35. inputReader.close();
36. socket.close();
37. } catch (IOException e) {
38. e.printStackTrace();
39. }
40. }
41. }
42. }SocketServer.java
Java代码
1. import java.io.BufferedReader;
2. import java.io.IOException;
3. import java.io.InputStreamReader;
4. import java.net.ServerSocket;
5. import java.net.Socket;
6.
7. public class SocketServer {
8.
9. public static void main(String[] args) {
10. SocketServer socketServer = new SocketServer();
11. socketServer.startServer();
12. }
13.
14. public void startServer() {
15. ServerSocket serverSocket = null;
16. BufferedReader reader = null;
17. Socket socket = null;
18. try {
19. // 端口号只要不冲突就行
20. serverSocket = new ServerSocket(9898);
21. System.out.println("server started..");
22. // 进入阻塞状态,等待客户端接入
23. socket = serverSocket.accept();
24. System.out.println("client " + socket.hashCode() + " connected");
25. // 从socket中读取数据
26. reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
27. String receiveMsg;
28. while ((receiveMsg = reader.readLine()) != null) { // 以"\n"结束
29. System.out.println(receiveMsg);
30. }
31. } catch (Exception e) {
32. e.printStackTrace();
33. } finally {
34. try {
35. reader.close();
36. socket.close();
37. serverSocket.close();
38. } catch (IOException e) {
39. e.printStackTrace();
40. }
41. }
42. }
43. }
二.Client Server双向通信
即时接受消息,也就是所谓的长连接,记得要先启动Server。
SocketClient2.java
Java代码
1. import java.io.BufferedReader;
2. import java.io.BufferedWriter;
3. import java.io.IOException;
4. import java.io.InputStreamReader;
5. import java.io.OutputStreamWriter;
6. import java.net.Socket;
7.
8. public class SocketClient2 {
9.
10. public static void main(String[] args) {
11. SocketClient2 client = new SocketClient2();
12. client.start();
13. }
14.
15. public void start() {
16. BufferedReader inputReader = null;
17. // 从socket读取
18. BufferedReader reader = null;
19. BufferedWriter writer = null;
20. Socket socket = null;
21. // Alt + Shift + z try...catch等快捷键
22. // 从Console读取内容
23. try {
24. socket = new Socket("127.0.0.1", 9898);
25. // 用于读取服务器返回的数据
26. reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
27. // 从socket进行写入
28. writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
29. inputReader = new BufferedReader(new InputStreamReader(System.in));
30. String inputContent;
31. while (!(inputContent = inputReader.readLine()).equals("bye")) {
32. writer.write(inputContent + "\n");
33. writer.flush();
34. // System.out.println(inputContent);
35. // 服务器返回的数据
36. String response = reader.readLine();
37. System.out.println(response);
38. }
39. } catch (Exception e) {
40. e.printStackTrace();
41. } finally {
42. try {
43. reader.close();
44. writer.close();
45. inputReader.close();
46. socket.close();
47. } catch (IOException e) {
48. e.printStackTrace();
49. }
50. }
51. }
52. }SocketServer2.java
Java代码
1. import java.io.BufferedReader;
2. import java.io.BufferedWriter;
3. import java.io.IOException;
4. import java.io.InputStreamReader;
5. import java.io.OutputStreamWriter;
6. import java.net.ServerSocket;
7. import java.net.Socket;
8.
9. public class SocketServer2 {
10.
11. public static void main(String[] args) {
12. SocketServer2 socketServer = new SocketServer2();
13. socketServer.startServer();
14. }
15.
16. public void startServer() {
17. ServerSocket serverSocket = null;
18. BufferedReader reader = null;
19. BufferedWriter writer = null;
20. Socket socket = null;
21. try {
22. // 端口号只要不冲突就行
23. serverSocket = new ServerSocket(9898);
24. System.out.println("server started..");
25. // 进入阻塞状态,等待客户端接入
26. socket = serverSocket.accept();
27. System.out.println("client " + socket.hashCode() + " connected");
28. // 从socket中读取数据
29. reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
30. writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
31. String receiveMsg;
32. while ((receiveMsg = reader.readLine()) != null) { // 以"\n"结束
33. System.out.println(receiveMsg);
34. writer.write("server reply:" + receiveMsg + "\n");
35. writer.flush();
36. }
37. } catch (Exception e) {
38. e.printStackTrace();
39. } finally {
40. try {
41. reader.close();
42. writer.close();
43. socket.close();
44. serverSocket.close();
45. } catch (IOException e) {
46. e.printStackTrace();
47. }
48. }
49. }
50. }
三.Socket模拟http请求响应(仅模拟)
Java代码
1. import java.io.BufferedReader;
2. import java.io.InputStreamReader;
3. import java.io.PrintStream;
4. import java.io.PrintWriter;
5. import java.net.ServerSocket;
6. import java.net.Socket;
7. import java.util.Date;
8. import java.util.Random;
9.
10. public class SimpleServer {
11. private ServerSocket ss;
12. private Socket socket;
13. private BufferedReader in;
14. private PrintWriter out;
15. private Random random = new Random();
16.
17. public SimpleServer() {
18. try {
19. this.ss = new ServerSocket(9898);
20.
21. System.out.println("The server is waiting your input...");
22. for (;;) {
23. this.socket = this.ss.accept();
24.
25. this.in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
26. this.out = new PrintWriter(this.socket.getOutputStream(), true);
27. String line = this.in.readLine();
28.
29. System.out.println("you input is : " + line);
30.
31. String echo = randomEcho();
32. System.out.println("echo : " + echo);
33. StringBuilder sb = new StringBuilder();
34. sb.append("HTTP/1.1 200 OK").append("\n")
35. .append("Content-Type:application/x-www-form-urlencoded;charset=UTF-8").append("\n")
36. .append("Date:").append(new Date().toString()).append("\n").append("Content-Length:")
37. .append(echo.getBytes().length).append("\n").append("\n").append(echo);
38.
39. this.out.println(sb.toString());
40. this.out.flush();
41.
42. this.out.close();
43. this.in.close();
44. this.socket.close();
45. if (line.equalsIgnoreCase("quit") || line.equalsIgnoreCase("exit") || line.equalsIgnoreCase("bye")) {
46. break;
47. }
48. }
49. this.ss.close();
50. } catch (Exception e) {
51. e.printStackTrace();
52. }
53. }
54.
55. private String randomEcho() throws Exception {
56. int num = this.random.nextInt();
57. StringBuilder sb = new StringBuilder();
58. sb.append("respCode=").append("0000").append("&").append("respMsg=").append("随机消息:" + num);
59. // String signature = SignUtil.sign(ResourcesUtils.getInstance().tppPriKey().trim().getBytes("UTF-8"), sb.toString());
60. // sb.append("&").append("signature=").append(signature);
61. return sb.toString();
62. }
63.
64. public static void main(String[] args) {
65. new SimpleServer();
66. }
67. }希望这篇文章可以帮助到你,总之同学们,it资讯尽在职坐标。
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号