java tcp 编程实例_Java实现基于TCP的通讯程序实例解析
Java中的TCP通信程序
TCP可以实现两台计算机之间的数据交互通信的两端,要严格区分客户端与服务端
两端通信时的步骤:
1.服务端程序,需要事先启动,等待客户端连接
2.客户端主动连接服务器端,才能成功通信,服务器端不可以主动链接客户端
在java中两个类用于实现TCP通信程序:
客户端: java.net.Socket 类表示。创建 Socket 对象,向服务端发出连接请求,服务端响应请求,两者建 立连接开始通信。
服务端: java.net.ServerSocket 类表示。创建 ServerSocket 对象,相当于开启一个服务,并等待客户端 的连接。
Socket类
socket类:该类实现客户端套接字,套接字是指两台设备之间的端点
构造方法:
public Socket(String host,int port):创建套接字对象并将其连接到指定对象的主机上,如果指定的host为NULL,则相当于指定的地址为回送地址
回送地址
回送地址(127.x.x.x) 是本机回送地址(Loopback Address),主要用于网络软件测试以及本 地机进程间通信,无论什么程序,一旦使用回送地址发送数据,立即返回,不进行任何网络传输。
构造举例
Socket client=new Socket(“127.0.0.1”,666)
成员方法:
public InputStream getInputStream() : 返回此套接字的输入流。 如果此Scoket具有相关联的通道,则生成的InputStream 的所有操作也关联该通道。 关闭生成的InputStream也将关闭相关的Socket。
public OutputStream getOutputStream() : 返回此套接字的输出流。 如果此Scoket具有相关联的通道,则生成的OutputStream 的所有操作也关联该通道。 关闭生成的OutputStream也将关闭相关的Socket
public void close() :关闭此套接字。 一旦一个socket被关闭,它不可再使用。 关闭此socket也将关闭相关的InputStream和OutputStream 。
public void shutdownOutput() : 禁用此套接字的输出流。 任何先前写出的数据将被发送,随后终止输出流。
ServerSocket类
public ServerSocket(int port) :使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指 定的端口号上,参数port就是端口号
构造举例代码如下:
ServerSocket server=new ServerSocket(666)
成员方法 public Socket accept() :侦听并接受连接,返回一个新的Socket对象,用于和客户端实现通信。
两个需要明确的事情
1多个服务器端与客户进行交互,服务器必须明确是和哪个客户端进行交互,这个accept()方法用与获取请求的客户端对象
2.多个客户端同时与服务器进行交互就需要使用多个io流对象
服务器是没有io流的,服务器可以获取到请求的客户端对象的scoket,使用每一个客户端Socket中提供的io流对象进行交互。
服务器端使用客户端的字节输入流读取客户端发送的数据,
服务器端使用客户端的字节输出流给客户端回写数据
即服务器端使用客户端流与客户端交互
好比生活中的我请客你买单
简单的TCP网络程序图解
【服务端】启动,创建ServerSocket对象,等待连接。 Socket client = new Socket("127.0.0.1", 6666); ServerSocket server = new ServerSocket(6666);
【客户端】启动,创建Socket对象,请求连接。
【服务端】接收连接,调用accept方法,并返回一个Socket对象
【客户端】Socket对象,获取OutputStream,向服务端写出数据
【服务端】Scoket对象,获取InputStream,读取客户端发送的数据。
【服务端】Socket对象,获取OutputStream,向客户端回写数据。
【客户端】Scoket对象,获取InputStream,解析回写数据
【客户端】释放资源,断开连接。
该方法 会一直阻塞直到建立连接。
下面写一段简单的客户端与服务器端交互的代码
服务器端代码
package Socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
System.out.println("服务器启动等待连接:");
//创建服务器端对象
ServerSocket serverSocket = new ServerSocket(8888);
//使用accept方法接受socket对象
Socket accept = serverSocket.accept();
//通过socket获取输入流
InputStream inputStream = accept.getInputStream();
//会不会阻塞
System.out.println("XXXXXXXXXXXXXXXXX");
byte[] bytes = new byte[1024];
int read = inputStream.read(bytes);
//通过字节数组生成字符串
String s = new String(bytes,0,read);
//输出
System.out.println(s);
//向客户端返回信息
OutputStream outputStream = accept.getOutputStream();
//返回内容
outputStream.write("内容已经收到".getBytes());
//关闭资源
inputStream.close();
serverSocket.close();
}
}
客户端代码
package Socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
//创建Socket对象
Socket socket = new Socket("127.0.0.1", 8888);
//获取输出流
OutputStream outputStream = socket.getOutputStream();
//给服务端发送消息
outputStream.write("你好".getBytes());
//创建输入流对象
InputStream inputStream = socket.getInputStream();
//创建读取的数组
byte[] bytes = new byte[1024];
//获取字节数组的长度
int read = inputStream.read(bytes);
//输出结果
System.out.println(new String(bytes,0,read));
//关闭流
outputStream.close();
//关闭Socket对象
socket.close();
}
}
结果
服务器端
客户端
以上就是Java中的TCP通信程序的一些基本操作,喜欢我的可以点赞收藏一波,我会不定期跟新文章,喜欢我的可以关注呀
到此这篇关于Java实现基于TCP的通讯程序实例解析的文章就介绍到这了,更多相关Java TCP通信程序内容请搜索云海天教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持云海天教程!
原文链接:https://www.cnblogs.com/pjhaymy/p/13354588.html
java tcp 编程实例_Java实现基于TCP的通讯程序实例解析相关推荐
- java聊天程序步骤解析_java网络之基于UDP的聊天程序示例解析
基于UDP的Socket通信 UDP协议不是一种基于稳定连接的协议,是一种面向数据报包的通信协议,不需要通信双方建立稳定的连接,也没有所谓服务端和客户的概念,数据报包在传输的时候不保证一定及时到达,也 ...
- java并发编程实践_Java并发编程实践如何正确使用Unsafe
一.前言 Java 并发编程实践中的话: 编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各 ...
- java基础篇18-网络编程的常识和基于TCP协议的编程模型
1.网络编程的常识 目前主流的网络通讯软件有:微信.QQ.YY.陌陌.探探.飞信.阿里旺旺.... 在吗? 1.1 七层网络模型 为了保证数据传递的可靠安全等等,ISO(国际标准委员会组 ...
- 【Java 网络编程】网络通信原理、TCP、UDP 回显服务
一.网络发展历史 互联网从何而来? 这要追溯到上个世纪 50 - 60 年代,当时正逢美苏争霸冷战,核武器给战争双方提供了足够的威慑力,想要保全自己,就要保证自己的反制手段是有效的. 如何保证能够反击 ...
- java 网络编程 聊天_Java——网络编程(实现基于命令行的多人聊天室)
目录: 1.ISO和TCP/IP分层模型 2.IP协议 3.TCP/UDP协议 4.基于TCP的网络编程 5.基于UDP的网络编程 6.基于TCP的多线程的聊天室的实现 1.ISO和TCP/IP分层模 ...
- java socket编程心跳_Java Socket编程心跳包创建实例解析
1.什么是心跳包? 心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包. 用来判断对方(设备,进程或其它网元)是否正常运行,采用 ...
- java网络编程 听_java网络编程 - 亲亲媛的个人空间 - OSCHINA - 中文开源技术交流社区...
一.TCP/UDP,Socket,Http,Ftp简介 1.TCP/IP是个协议组(主要解决数据如何在网络中传输),可分为三个层次:网络层.传输层和应用层: 网络层:IP协议(支持网间互联的数据报协议 ...
- java 函数式编程 示例_Java套接字编程–套接字服务器,客户端示例
java 函数式编程 示例 Welcome to Java Socket programming example. Every server is a program that runs on a s ...
- Java网络编程基础_Java网络编程基础篇
一.前言 网络通讯在系统交互中是必不可少的一部分,无论是面试还是工作中都是绕不过去的一部分,本节我们来谈谈Java网络编程中的一些知识,本chat内容如下: 网络通讯基础知识,剖析网络通讯的本质和需要 ...
最新文章
- 排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)
- [导入]如何理解Return的返回值?
- MACD 的数学解释
- java怎么实现人物的行走,js键盘事件实现人物的行走
- 凸多边形面积_C++计算任意多边形的面积
- SQL Server 常用近百条SQL语句(收藏版)
- linux mysql可视化_常用的 7 款 MySQL 客户端工具,你值得拥有!
- Android 9.0/P 开发问题及解决方案汇总
- 新工具︱微软Microsoft Visual Studio的R语言模块下载试用Ing...(尝鲜)
- linux tomcat reload,linux-tomcat安装配置
- 认识netty+实战
- Latex表格排版大全 基于 IEEE双栏论文(设置单元格行列间距,自动换行设置)
- netbeans php 安装教程,Netbeans下载安装教程教程
- 通讯测试模拟软件,通讯测试工具之二——Modbus测试工具(Modbus Slave调试工具)-专业自动化论坛-中国工控网论坛...
- 解决azkaban使用腾讯企业邮箱发邮件失败问题
- 20【材料】相关专业调剂信息!一直更新!
- python中的与或非详解
- 一次惨痛的线下机房上云的经历
- js处理json数组
- android 主流屏幕比例,Android 主流屏幕以及适配
热门文章
- leetcode 662. Maximum Width of Binary Tree | 662. 二叉树最大宽度(BFS)
- 【Spring接MySQL数据库的坑】Could not open JDBC Connection for transaction
- c4.5算法 程序语言,决策树之C4.5算法详解-Go语言中文社区
- 一层循环时间复杂度_数据结构:二叉排序树的前/中/后序遍历(递归与循环两种版本)...
- JAVA 中无锁的线程安全整数 AtomicInteger介绍和使用
- Mybatis基本配置和搭建
- Linux gdb多进程、多线程调试
- 01.计算机体系结构概述.md
- 【最详细】测试点分析_1051 复数乘法 (15分)_14行代码AC
- python跳转到程序顶部_python-如何使Tkinter窗口跳到最前面?