通过 Socket 实现 TCP 编程入门
这里我们通过一个用户登录的例子来学习基于 TCP 协议的 Socket 通信。
Socket 通信模型
Socket通信步骤
ServerSocket 构造器和成员方法
1、ServerSocket 构造方法
2、ServerSocket 成员方法
Socket 构造器和成员方法
1、Socket 构造器
2、Socket 成员方法
一个服务端和支持多个客户端的对话demo
1、server.java
- package com.liuyanzhao;
- import java.io.*;
- import java.net.InetAddress;
- import java.net.ServerSocket;
- import java.net.Socket;
- /**
- *
- * 基于TCP协议的Socket通信,实现用户登录
- * 服务端
- * @author 言曌
- * @date 2017/12/4 下午7:37
- */
- public class Server {
- public static void main(String args[]) {
- try {
- //1、创建一个服务端Socket,即ServerSocket,指定绑定的端口,并监听此端口
- ServerSocket serverSocket = new ServerSocket(8888);
- Socket socket = null;
- //记录客户端的数量
- int count = 0;
- //2、调用accept方法开始监听,等待客户端的连接
- System.out.println("***服务端即将启动,等待客户端的连接****");
- //循环监听等待客户端的连接
- while(true) {
- //调用accept()方法开始监听,等待客户端的连接
- socket = serverSocket.accept();
- //创建一个新的线程
- ServerThread serverThread = new ServerThread(socket);
- //启动线程
- serverThread.start();
- count ++;//统计客户端的数量
- System.out.println("客户端的数量:"+count);
- InetAddress inetAddress = socket.getInetAddress();
- System.out.println("当前客户端的IP:"+inetAddress.getHostAddress());
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
2、ServerThread.java
- package com.liuyanzhao;
- import java.io.*;
- import java.net.Socket;
- /**
- * 服务器线程处理类
- * @author 言曌
- * @date 2017/12/4 下午8:32
- */
- public class ServerThread extends Thread {
- //本线程相关的Socket
- Socket socket = null;
- public ServerThread(Socket socket) {
- this.socket = socket;
- }
- //线程执行操作,响应客户端的请求
- public void run() {
- InputStream inputStream = null;//字符输入流
- InputStreamReader inputStreamReader = null;
- BufferedReader bufferedReader = null;
- OutputStream outputStream = null;
- PrintWriter printWriter = null;
- try {
- //获取输入流,并读取客户端信息
- inputStream = socket.getInputStream();
- inputStreamReader = new InputStreamReader(inputStream);//将字节流转换成字符流
- bufferedReader = new BufferedReader(inputStreamReader);//为字符流添加缓存
- String info = null;
- while((info = bufferedReader.readLine()) != null) {
- System.out.println("我是服务器,客户端说:"+info);
- }
- socket.shutdownInput();//关闭输入流
- //获取输出流,响应客户端的请求
- outputStream = socket.getOutputStream();
- printWriter = new PrintWriter(outputStream);
- printWriter.write("欢迎您!");
- printWriter.flush();//刷新缓存
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- //关闭资源
- try {
- if(bufferedReader != null) {
- bufferedReader.close();
- }
- if(outputStream != null) {
- outputStream.close();
- }
- if(inputStreamReader != null) {
- inputStreamReader.close();
- }
- if(inputStream != null) {
- inputStream.close();
- }
- if(socket != null) {
- socket.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
3、Client.java
- package com.liuyanzhao;
- import java.io.*;
- import java.net.Socket;
- /**
- * 客户端
- * @author 言曌
- * @date 2017/12/4 下午7:37
- */
- public class Client {
- public static void main(String args[]) {
- try {
- //1、创建客户端Socket,指定服务器地址和端口
- Socket socket = new Socket("localhost",8888);
- //2、获取输出流,向服务器端发送信息
- OutputStream outputStream = socket.getOutputStream();//字节输出流
- PrintWriter printWriter = new PrintWriter(outputStream);//将输出流包装为打印流
- printWriter.write("用户名:Tom;密码:123456");
- printWriter.flush();//刷新缓存,输出信息
- socket.shutdownOutput();//关闭输出流
- //3、获取输入流,并读取服务器的响应信息
- InputStream inputStream = socket.getInputStream();
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
- String info = null;
- while((info = bufferedReader.readLine()) != null) {
- System.out.println("我是客户端,服务器说:"+info);
- }
- //4、 关闭资源
- printWriter.close();
- bufferedReader.close();
- inputStream.close();
- outputStream.close();
- socket.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
上面的程序支持一个服务端和多个客户端对话。
运行效果
1、先运行 Server 类
2、再运行 Client 类
服务端界面
客户端界面
3、再运行一次 Client 类,再启动一个客户端
服务端界面
客户端界面如上
本文参考:慕课网
本文地址:https://liuyanzhao.com/6907.html
通过 Socket 实现 TCP 编程入门相关推荐
- TCP原理,Socket与网络编程入门
TCP原理,Socket与网络编程入门 开篇 从互联网的诞生以来,网络程序逐渐普及.计算机网络将各个计算机连接到一起使它们可以通信.在现代,网络已成为我们十分重要的一部分.这次不搞些费脑子的东西,就让 ...
- Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤...
TCP和UDP是两个传输层协议,广泛应用于网络中不同主机之间传输数据.对任何程序员来说,熟悉TCP和UDP的工作方式都是至关重要的.这就是为什么TCP和UDP是一个流行的Java编程面试问题. Jav ...
- JAVA 通过 Socket 实现 TCP 编程
简介 TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机 ...
- java tcp实现_JAVA 通过 Socket 实现 TCP 编程
简介 TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机 ...
- linux网络编程socket,Linux网络编程入门
socket又叫做套接字,网络编程又叫做套接字编程.而socket地址也称为套接字地址,可以理解为计算机的网络地址. 1.理解socket地址 假设小明同学想给女神打电话需要知道对方的电话号码才能继续 ...
- python网络-Socket之TCP编程(26)
一.TCP简介 1.TCP介绍 TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的.可靠的.基于字节流的传输层通信协议. TC ...
- Java的Socket通信----通过 Socket 实现 TCP 编程之多线程demo(2)
JAVA Socket简介 所谓socket 通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答 ...
- 使用多线程实现多客户端的连接(通过Socket实现TCP编程)
服务器线程类 package com.susu;import java.io.BufferedReader; import java.io.IOException; import java.io.In ...
- java 中的网络编程(Socket、TCP三次握手四次挥手、TCP/UDP/URL)
文章目录 前言 一.网络编程概述 二.网络通信要素概述 1.如何实现网络中的主机互相通信 2.网络通信协议 3.IP和端口号 4.InetAddress类 5.网络协议 6.TCP/IP协议簇 7.T ...
- Java基础 - 网络编程 - InetAddress类、Socket(TCP)举例使用
文章目录 InetAddress类 相关方法 代码举例 Socket 基本介绍 基本介绍2 应用案例(TCP字节流) 应用案例2(TCP字节流) 注意(结束标记) 应用案例3(TCP字符流) 注意(结 ...
最新文章
- MySQL 优化原理(一)
- linux内核链表使用例,Linux设备驱动工程师之路——内核链表的使用
- C#中dynamic的正确用法 以及 typeof(DynamicSample).GetMethod(Add);
- 【联盛德W806上手笔记】七、I2C
- [你必须知道的.NET]第三十一回,深入.NET 4.0之,从“新”展望
- 台式机电脑配置单_2020年电脑配置单重点硬件参考
- 单例模式在JDK应用的源码分析
- python 动态相册_Python编程:制作电子相册
- 新华三副总裁李立:建设智慧城市的三大误区
- git merge 和 git rebase 小结
- java开发微信提现_java 微信提现至零钱
- MapGuide open source开发心得一:简介
- win7录屏_录屏软件推荐用什么?绝地求生录屏游戏的工具分享
- 如何在华为云上服务器部署WEB网站
- 合作小红书探店博主需要注意什么?流程是怎样的?
- CentOS 7的时间设置
- r5处理器_联想拯救者r7000 r7与r5哪个更值得买?差距大吗?下面价格和配置对比评测看完就明白了...
- 第一天:python的安装及print函数简单使用
- 数据库周刊36丨2020年8月数据库排行;云厂商腾讯云增速第一;OceanBase集群安装;Oracle RAC调整网卡MTU值;不改代码解决sql性能问题;Mysql索引研究;TiDB电子书……
- 从Map中 取出第一个key/第一个value的方法