基于java socket的简单通信系统

青旅半醒 2021-06-10 20:40 542阅读 0赞

版本一 单客户端单服务器通信

  • 服务端代码:

    public class ServerDemo {

    1. public static void main(String[] args) throws IOException {
    2. ServerSocket serverSocket = new ServerSocket(8888);
    3. System.out.println("Server started with port number 8888...");
    4. while (true) {
    5. Socket socket = serverSocket.accept();
    6. System.out.println("有新客户端接入。。。");
    7. Boolean isOff = false;
    8. new Thread(new Runnable() {
    9. Socket s;
    10. Boolean isOff;
    11. Runnable setSocket(Socket s,Boolean isOff) {
    12. this.s = s;
    13. this.isOff = isOff;
    14. return this;
    15. }
    16. @Override
    17. public void run() {
    18. InputStream inputStream;
    19. try {
    20. inputStream = s.getInputStream();
    21. try(BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))){
    22. String line;
    23. while (!isOff && (line = reader.readLine()) != null) {
    24. System.out.println("client:"+ line);
    25. }
    26. }
    27. } catch (Exception e) {
    28. System.out.println("server 已退出通信!");
    29. } finally {
    30. if(s != null){
    31. try {
    32. s.close();
    33. } catch (IOException e) {
    34. e.printStackTrace();
    35. }
    36. }
    37. }
    38. }
    39. }.setSocket(socket,isOff)).start();
  1. new Thread(new Runnable() {
  2. Socket s;
  3. Boolean isOff;
  4. Runnable setSocket(Socket s,Boolean isOff) {
  5. this.s = s;
  6. this.isOff = isOff;
  7. return this;
  8. }
  9. @Override
  10. public void run() {
  11. Scanner scanner = new Scanner(System.in);
  12. String line;
  13. OutputStream outputStream = null;
  14. try {
  15. outputStream = s.getOutputStream();
  16. } catch (IOException e) {
  17. e.printStackTrace();
  18. }
  19. try (BufferedOutputStream writer = new BufferedOutputStream(outputStream)) {
  20. while (!isOff && !(line = scanner.nextLine()).equals("exit") ) {
  21. line += "\n";
  22. writer.write(line.getBytes(StandardCharsets.UTF_8));
  23. writer.flush();
  24. }
  25. writer.write("\nGoodbye! client!".getBytes(StandardCharsets.UTF_8));
  26. writer.flush();
  27. isOff = true;
  28. } catch (IOException e) {
  29. System.out.println("server 已退出通信!");
  30. } finally {
  31. if(s != null){
  32. try {
  33. s.close();
  34. } catch (IOException e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. }
  39. }
  40. }.setSocket(socket,isOff)).start();
  41. }
  42. }
  43. }
  • 客户端代码:

    public class ClientDemo {

    1. public static void main(String[] args) throws IOException {
    2. Socket socket = new Socket("127.0.0.1",8888);
    3. Boolean isOff = false;
    4. System.out.println("Server connected successfully...");
    5. new Thread(new Runnable() {
    6. Socket s;
    7. Boolean isOff;
    8. Runnable setSocket(Socket s,Boolean isOff) {
    9. this.s = s;
    10. this.isOff = isOff;
    11. return this;
    12. }
    13. @Override
    14. public void run() {
    15. Scanner scanner = new Scanner(System.in);
    16. String line;
    17. OutputStream outputStream;
    18. try {
    19. outputStream = s.getOutputStream();
    20. try (BufferedOutputStream writer = new BufferedOutputStream(outputStream)) {
    21. while (!(line = scanner.nextLine()).equals("exit")) {
    22. line += "\n";
    23. writer.write(line.getBytes(StandardCharsets.UTF_8));
    24. writer.flush();
    25. }
    26. writer.write("\nGoodbye! server!".getBytes(StandardCharsets.UTF_8));
    27. writer.flush();
    28. isOff = true;
    29. } catch (Exception e) {
    30. System.out.println("client 已退出通信!");
    31. }finally {
    32. if(s != null){
    33. try {
    34. s.close();
    35. } catch (IOException e) {
    36. e.printStackTrace();
    37. }
    38. }
    39. }
    40. }catch (Exception e) {
    41. System.out.println("client 已退出通信!");
    42. }
    43. }
    44. }.setSocket(socket,isOff)).start();
    45. new Thread(new Runnable() {
    46. Socket s;
    47. Boolean isOff;
    48. Runnable setSocket(Socket s,Boolean isOff) {
    49. this.s = s;
    50. this.isOff = isOff;
    51. return this;
    52. }
    53. @Override
    54. public void run() {
    55. InputStream inputStream;
    56. try {
    57. inputStream = socket.getInputStream();
    58. try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
    59. String line;
    60. while ((line = bufferedReader.readLine()) != null && !isOff){
    61. System.out.println("server:"+line);
    62. }
    63. }
    64. } catch (IOException e) {
    65. System.out.println("通信已经关闭了!");
    66. }
    67. }
    68. }.setSocket(socket,isOff)).start();
    69. }

    }

  • server端运行示例如下:
    在这里插入图片描述

  • client端运行示例如下:在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,542人围观)

还没有评论,来说两句吧...

相关阅读

    相关 基于socketwifi通信

    1. 客户端服务端新建一个ServerSocket,再调用accept()方法监听客户端的连接,在连接之前,此方法一直阻塞,连接成功后,返回客户端一样的socket; 2.

    相关 android基于Socket通信

    前段时间,上了两节通信课,感觉通信这东西挺高端的,于是就认真的听了两课,感觉收获还挺多的。然后老师就让我们每小组着手做自己的项目,我们小组做的是android版《小黄鸡音乐播放

    相关 简单一对一Socket通信

    之前学弟还问过我这个,但是都是肤浅的查查资料,晚上抽空在慕课系统的了解下,慢慢来吧. 首先Socket通信需要创建一个服务端和一个客户端 建立连接后,既可以通过字节流进行通