目录

基本概念

代码与实例


基本概念

这里采用的是TCP模型,只说明一点,在Java中有

import java.net.Socket;

这个包中TCP的用法个人觉得和QTcpSocket差不多(个人觉得QTcpSocket好用点,可能是自己习惯问题)

这里用控制台输入,输出可以采用这样的方式!

首先构造一个输入流:

InputStream in = System.in;
BufferedReader input = new BufferedReader(new InputStreamReader(in));

得到socket的输入流

InputStream inputStream = client.getInputStream();
BufferedReader socketBufferedReader = new BufferedReader(new InputStreamReader(inputStream));

然后从键盘输入就可以直接发送了!

String str = input.readLine();
socketPrintStream.println(str);

这样的话,就要从键盘输入,然后再发送了!

代码与实例

程序运行截图如下

服务器端:

客户端:

源码如下:

Client.java

import java.io.*;
import java.net.Inet4Address;
import java.net.InetSocketAddress;
import java.net.Socket;public class Client {public static void main(String[] args) throws IOException{Socket socket = new Socket();socket.setSoTimeout(3000);//连接本地, 端口 2000, 超时时间3000mssocket.connect(new InetSocketAddress(Inet4Address.getLocalHost(), 2000), 3000);System.out.println("已发起服务器连接,并进入后续流程!");System.out.println("客户端信息:" + socket.getLocalAddress() + " p:" + socket.getLocalPort());System.out.println("服务器信息:" + socket.getInetAddress() + " p:" + socket.getPort());try{todo(socket);}catch (Exception e){System.out.println("异常关闭");}//释放资源socket.close();System.out.println("客户端已退出!");}private static void todo(Socket client) throws IOException{//得到socket输出流,并转换为打印流OutputStream outputStream = client.getOutputStream();PrintStream socketPrintStream = new PrintStream(outputStream);//构建键盘输入流InputStream inputStream = client.getInputStream();InputStream in = System.in;BufferedReader input = new BufferedReader(new InputStreamReader(in));BufferedReader socketBufferedReader = new BufferedReader(new InputStreamReader(inputStream));boolean flag = true;do{//键盘读取一行String str = input.readLine();//发送到服务器socketPrintStream.println(str);//从服务器读取一行String echo = socketBufferedReader.readLine();if("bye".equalsIgnoreCase(echo)){flag = false;}else{System.out.println(echo);}}while (flag);//资源释放socketPrintStream.close();socketBufferedReader.close();}
}

Server.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;public class Server {public static void main(String[] args) throws IOException{ServerSocket server = new ServerSocket(2000);System.out.println("服务器准备就绪!");System.out.println("服务器信息:" + server.getInetAddress() + " P:" + server.getLocalPort());//等待服务器连接server.accept();for(;;){//得到客户端Socket client = server.accept();//客户端构建异步线程ClientHandler clientHandler = new ClientHandler(client);//启动线程clientHandler.start();}}private static class ClientHandler extends Thread{private Socket socket;private boolean flag = true;ClientHandler(Socket socket){this.socket = socket;}@Overridepublic void run() {super.run();System.out.println("新客户端连接:" + socket.getInetAddress() + " P:" + socket.getPort());try{//得到打印流,用于数据输出;服务器会送数据使用PrintStream socketOutput = new PrintStream(socket.getOutputStream());//得到输入流,用于接收数据BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));do{//客户端拿到一条数据String str = socketInput.readLine();if("bye".equalsIgnoreCase(str)){flag = false;//回送socketOutput.println("bye");}else{//打印到屏幕,并回送数据长度System.out.println(str);socketOutput.println("回送:" + str.length());}}while (flag);socketInput.close();socketOutput.close();}catch (Exception e){System.out.println("连接异常断开!");}finally {//关闭连接try{socket.close();} catch (IOException e) {e.printStackTrace();}}System.out.println("客户端已退出:" + socket.getInetAddress() + " P:" + socket.getPort());}}
}

Java Socket笔记-利用tcp socket搭建CS模型相关推荐

  1. Python应用-[用Python实现一个socket echo程序 tcp socket的几个关闭状态]

    这里用Python实现了一个echo程序的服务端和客户端,客户端发出的东西,服务端打上一个时间戳后给客户端发回去.主要是实践一下Python的socket编程 Python的socket相关的比较低层 ...

  2. wireshark 抓包再利用TCP socket发送包里的payload是可以实现登陆的

    用户密码可被批量破解 在用户使用手机端登录时,对数据进行抓包分析. 多次抓包分析后,可得到几个关键TCP数据包. 根据前面逆向编写出的解密算法,使用socket进行数据发包测试: 可以模拟APK进行用 ...

  3. java搭建tcp客户端_【Java学习笔记】TCP客户端/服务器端

    客户端: import java.net.Socket; import java.net.InetAddress; import java.net.UnknownHostException; impo ...

  4. tcp socket编程 java_JAVA TCP Socket编程 计算题

    展开全部 服务器端CalculateServer.java:package serverModule; import java.io.BufferedReader; import java.io.IO ...

  5. Java工作笔记-WebService使用JDK搭建WebService及调用

    首先是使用jdk搭建WebService 源码如下: WeatherService.java package webservice;public interface WeatherService {S ...

  6. Java学习笔记1.1.3 搭建Java开发环境 - 编写并运行Java程序

    文章目录 零.本讲学习目标 一.Java运行原理 二.编写Java程序 (一)编写源程序 (二)编译成字节码文件 (三)解释执行类 (四)常见错误 1.公共类的类名与文件名不一致 2.系统类名首字母没 ...

  7. Java学习笔记1.1.2 搭建Java开发环境 - 安装配置JDK

    文章目录 零.本讲学习目标 一.下载JDK11 (一)Oracle官网下载JDK11.0.14 (二)百度网盘下载JDK11.0.7 (三)百度网盘下载OpenJDK11.0.2 二.安装JDK11 ...

  8. Java学习笔记1.1.1 搭建Java开发环境 - Java概述

    文章目录 零.本讲学习目标 一.为什么要学Java? (一)查看TIOBE指标 (二)为什么Java如此受欢迎 1.简单易学 2.跨平台 3.类库丰富 4.使用广泛 5.薪资可观 二.Java简史 ( ...

  9. Java Socket通信之TCP协议

    文章目录 一. Java流套接字通信模型 1.TCP模型 2.TCP Socket常见API ServerSocket API Socket API 二.TCP流套接字编程 1.回显服务器 2.多线程 ...

最新文章

  1. 【radar】毫米波雷达动态障碍物检测相关论文汇总(聚类、分类、稀疏2D点、4D点、雷达成像、原始数据处理)(4)
  2. 一个查看Cookie的便捷工具——EditThisCookie
  3. C++ STL : 模拟实现STL中的容器适配器stack和queue
  4. ha 配置ssl_haproxy ssl 配置方式-阿里云开发者社区
  5. php curl 命令行,curl 命令行教程
  6. 狂神说Java--Java学习笔记(合集)
  7. 魔兽按键精灵 V2.0(修正1)
  8. 计算机硬盘坏的原因,硬盘损坏的原因有哪些 硬盘正确使用方法介绍
  9. vue2.0生命周期数据共享
  10. 【数据结构】顺序表详解 | 从零开始步步解读 | 画图理解并调试分析
  11. 小程序复用公众号资质快速认证
  12. [WTL/ATL]_[初级]_[微调控件CUpDownCtrl的使用]
  13. MAX31865模块PT100两线制测温
  14. fopen函数和文件权限
  15. Js与Jq实战:第二讲:JavaScript基础
  16. 拉勾网职位数据爬取与分析(一)
  17. ORA-02292: 违反完整约束条件 (***.FK_****) - 已找到子记录
  18. php编程模块英文缩写_php的英文全称是什么
  19. [倚天屠龙记] vim 查找与替换(正则表达式)
  20. 【MATLAB】分时段分类汇总代码

热门文章

  1. 编译Linux版本飞鸽传书的不完全解决办法
  2. 给大家一个网站程序,fastmai网站源码
  3. 从 VC7 的 CHtmlView 不能正常退出谈 CComPtr 使用中的一个误区
  4. C语言程序设计基础讲座之指针的慨念
  5. 购买MP3必备资料 各大芯片方案齐齐数
  6. 防止Visual C++应用程序缓冲区溢出
  7. VC实现对话框上信息的显示
  8. web前端 如何入门人工智能算法
  9. java map同步访问_同步 - Java synchronized块与Collections.synchronizedMap
  10. 生信老司机以中心法则为主线讲解组学技术的应用和生信分析心得—限时免费