1. import java.io.*;
  2. import java.net.Inet4Address;
  3. import java.net.InetSocketAddress;
  4. import java.net.Socket;
  5.  
  6. public class Client {
  7. public static void main(String[] args) throws IOException {
  8. Socket socket = new Socket();
  9. // 超时时间
  10. socket.setSoTimeout(3000);
  11.  
  12. // 连接本地,端口2000;超时时间3000ms
  13. socket.connect(new InetSocketAddress(Inet4Address.getLocalHost(), 2000), 3000);
  14.  
  15. System.out.println("已发起服务器连接,并进入后续流程~");
  16. System.out.println("客户端信息:" + socket.getLocalAddress() + " P:" + socket.getLocalPort());
  17. System.out.println("服务器信息:" + socket.getInetAddress() + " P:" + socket.getPort());
  18.  
  19. try {
  20. // 发送接收数据
  21. todo(socket);
  22. } catch (Exception e) {
  23. System.out.println("异常关闭");
  24. }
  25.  
  26. // 释放资源
  27. socket.close();
  28. System.out.println("客户端已退出~");
  29.  
  30. }
  31.  
  32. private static void todo(Socket client) throws IOException {
  33. // 构建键盘输入流
  34. InputStream in = System.in;
  35. BufferedReader input = new BufferedReader(new InputStreamReader(in));
  36.  
  37. // 得到Socket输出流,并转换为打印流
  38. OutputStream outputStream = client.getOutputStream();
  39. PrintStream socketPrintStream = new PrintStream(outputStream);
  40.  
  41. // 得到Socket输入流,并转换为BufferedReader
  42. InputStream inputStream = client.getInputStream();
  43. BufferedReader socketBufferedReader = new BufferedReader(new InputStreamReader(inputStream));
  44.  
  45. boolean flag = true;
  46. do {
  47. // 键盘读取一行
  48. String str = input.readLine();
  49. // 发送到服务器
  50. socketPrintStream.println(str);
  51.  
  52. // 从服务器读取一行
  53. String echo = socketBufferedReader.readLine();
  54. if ("bye".equalsIgnoreCase(echo)) {
  55. flag = false;
  56. }else {
  57. System.out.println(echo);
  58. }
  59. }while (flag);
  60.  
  61. // 资源释放
  62. socketPrintStream.close();
  63. socketBufferedReader.close();
  64.  
  65. }
  66.  
  67. }
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.io.PrintStream;
  5. import java.net.ServerSocket;
  6. import java.net.Socket;
  7.  
  8. public class Server {
  9. public static void main(String[] args) throws IOException {
  10. ServerSocket server = new ServerSocket(2000);
  11.  
  12. System.out.println("服务器准备就绪~");
  13. System.out.println("服务器信息:" + server.getInetAddress() + " P:" + server.getLocalPort());
  14.  
  15. // 等待客户端连接
  16. for (; ; ) {
  17. // 得到客户端
  18. Socket client = server.accept();
  19. // 客户端构建异步线程
  20. ClientHandler clientHandler = new ClientHandler(client);
  21. // 启动线程
  22. clientHandler.start();
  23. }
  24.  
  25. }
  26.  
  27. /**
  28. * 客户端消息处理
  29. */
  30. private static class ClientHandler extends Thread {
  31. private Socket socket;
  32. private boolean flag = true;
  33.  
  34. ClientHandler(Socket socket) {
  35. this.socket = socket;
  36. }
  37.  
  38. @Override
  39. public void run() {
  40. super.run();
  41. System.out.println("新客户端连接:" + socket.getInetAddress() +
  42. " P:" + socket.getPort());
  43.  
  44. try {
  45. // 得到打印流,用于数据输出;服务器回送数据使用
  46. PrintStream socketOutput = new PrintStream(socket.getOutputStream());
  47. // 得到输入流,用于接收数据
  48. BufferedReader socketInput = new BufferedReader(new InputStreamReader(
  49. socket.getInputStream()));
  50.  
  51. do {
  52. // 客户端拿到一条数据
  53. String str = socketInput.readLine();
  54. if ("bye".equalsIgnoreCase(str)) {
  55. flag = false;
  56. // 回送
  57. socketOutput.println("bye");
  58. } else {
  59. // 打印到屏幕。并回送数据长度
  60. System.out.println(str);
  61. socketOutput.println("回送:" + str.length());
  62. }
  63.  
  64. } while (flag);
  65.  
  66. socketInput.close();
  67. socketOutput.close();
  68.  
  69. } catch (Exception e) {
  70. System.out.println("连接异常断开");
  71. } finally {
  72. // 连接关闭
  73. try {
  74. socket.close();
  75. } catch (IOException e) {
  76. e.printStackTrace();
  77. }
  78. }
  79.  
  80. System.out.println("客户端已退出:" + socket.getInetAddress() +
  81. " P:" + socket.getPort());
  82.  
  83. }
  84. }
  85. }

Socket TCP客户端和服务器的实现的更多相关文章

  1. 通用异步 Windows Socket TCP 客户端组件的设计与实现

    编写 Windows Socket TCP 客户端其实并不困难,Windows 提供了6种 I/O 通信模型供大家选择.但本座看过很多客户端程序都把 Socket 通信和业务逻辑混在一起,剪不断理还乱 ...

  2. cross socket tcp客户端开发

    cross socket tcp客户端开发 uses Net.SocketAPI, Net.CrossSocket.Base, Net.CrossSocket FCrossTcp: ICrossSoc ...

  3. socket | tcp客户端 tcp服务器 udp客户端 udp 服务器 创建方法

    tcp服务器 #coding=utf-8 ''' 这里是tcp服务器端,要先启动 ''' import socket import threading bind_ip = "0.0.0.0& ...

  4. [JAVA] Tcp客户端和服务器简单代码

    服务器: import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; im ...

  5. Java实验四 TCP客户端和服务器的应用

    实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全 4.对通信内容进行摘要计算并验证 实验步骤 1.信息安全传送: 发送方A——————>接收方B A加密时,用B ...

  6. Java 使用 Socket 实现客户端和服务器的信息交互

    服务器 public class Server{ private ServerSocket serverSocket; private Socket socket; private BufferedR ...

  7. TCP客户端和服务器间传输数据遇到的TypeError: a bytes-like object is required, not 'str'问题

    使用python实现python核心编程3第472页和474页的TCP时间戳服务器和客户端服务器间数据传输编程时遇到TypeError: a bytes-like object is required ...

  8. TCP客户端与服务器的实现

    为了更容易理解,我们举一个小例子来说明服务器与客户端之间的连接过程. 有一个饭店,饭店里有服务员,服务员用于招待客人 特别要注意的是:要记住相关函数的各个参数都是什么,什么时候返回SOCKET_ERR ...

  9. tcp客户端从服务器下载文本文件

    代码讲解: server import socket def send_file_client(new_client_socket, new_client_addr): # 接收客户端需要下载的文件名 ...

随机推荐

  1. 第二篇-ubuntu18.04下怎么制作GIF动画

    一.在桌面打开终端 二.接着通过apt安装byzanz.sudo apt-get install byzanz 三.安装完成后在终端执行“xwininfo”.xwininfo 四.然后鼠标会变成“+” ...

  2. Echarts CPU监控 (折线仪表盘,图例混搭)

    https://blog.csdn.net/mengxiangfeiyang/article/details/44802939 CPU page   <script type="tex ...

  3. Linux/Unix系统QA

    Q1:Ext3的三种日志记录方式 1 data=writeback 方式data=writeback方式下,ext3根本不执行任何形式的数据日志记录,提供给您的是和在XFS,JFS和 ReiserFS ...

  4. 一键开启MacOS HiDPI

    完整文件下载:一键开启MacOS HiDPI 引言 作为一个黑苹果用户,追求黑果的体验是当然的,当各个硬件都驱动完善后,要做的就是细节的优化了,毕竟装上是拿来用的,可不能因为体验差苦了自己啊.机器毕竟 ...

  5. Linux如何查看机器的配置信息

    Linux如何查看机器的配置信息 1.查看内存信息 cat /proc/meminfo [root@web ~]# cat /proc/meminfo MemTotal: kB MemFree: kB ...

  6. Golang的排序和查找

    Golang的排序和查找 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.排序的基本介绍 排序是将一组数据,依指定的顺序进行排列的过程.排序的分类如下 1>.内部排序 指将 ...

  7. 【.NET】VS 本地调试 无法加载Json文件

    1.如果要是发布到iis,还加载不出来,那就要配置一下MIME类型: 2.本地调试时,无法加载json文件: 解决方案: 在web.config中添加如下配置:mimeMap <system.w ...

  8. ASP.NET的checkboxlist,RadioButtonList,FileUpload,image控件的综合使用

    一.拖控件 控件拖完如图所示:(有些是对不齐的,加一个表单就好了,把他们都放在表单里) 单纯的RadioButton是不能只选择一个的,除非你手动给他们加上代码: RadioButton1.Group ...

  9. PL/SQL Developer

    下载 一.Oracle 客户端(两种) 1.免安装轻量版(以这个为例) https://www.oracle.com/technetwork/database/database-technologie ...

  10. elasticsearch 集成springboot

    和jpa类似,很简单,很强大. pom <dependencies> <dependency> <groupId>org.springframework.boot& ...