时间:2021-05-19
Java中的TCP通信程序
TCP可以实现两台计算机之间的数据交互通信的两端,要严格区分客户端与服务端
两端通信时的步骤:
1.服务端程序,需要事先启动,等待客户端连接
2.客户端主动连接服务器端,才能成功通信,服务器端不可以主动链接客户端
在java中两个类用于实现TCP通信程序:
Socket类
socket类:该类实现客户端套接字,套接字是指两台设备之间的端点
构造方法:
public Socket(String host,int port):创建套接字对象并将其连接到指定对象的主机上,如果指定的host为NULL,则相当于指定的地址为回送地址
回送地址
回送地址(127.x.x.x) 是本机回送地址(Loopback Address),主要用于网络软件测试以及本 地机进程间通信,无论什么程序,一旦使用回送地址发送数据,立即返回,不进行任何网络传输。
构造举例
成员方法:
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就是端口号
构造举例代码如下:
成员方法 public Socket accept() :侦听并接受连接,返回一个新的Socket对象,用于和客户端实现通信。
两个需要明确的事情
1多个服务器端与客户进行交互,服务器必须明确是和哪个客户端进行交互,这个accept()方法用与获取请求的客户端对象
2.多个客户端同时与服务器进行交互就需要使用多个io流对象
服务器是没有io流的,服务器可以获取到请求的客户端对象的scoket,使用每一个客户端Socket中提供的io流对象进行交互。
服务器端使用客户端的字节输入流读取客户端发送的数据,
服务器端使用客户端的字节输出流给客户端回写数据
即服务器端使用客户端流与客户端交互
好比生活中的我请客你买单
简单的TCP网络程序图解
该方法 会一直阻塞直到建立连接。
下面写一段简单的客户端与服务器端交互的代码
服务器端代码
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通信程序内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了python基于socket实现的UDP及TCP通讯功能。分享给大家供大家参考,具体如下:Server:importsocketaddress=(
本文实例讲述了java基于dom4j包实现对XML解析的方法。分享给大家供大家参考,具体如下:本例中的xml文件内容如下:Java解析XML代码如下:packa
前言Java与其他语言编写的程序进行tcp/ipsocket通讯时,通讯内容一般都转换成byte数组型,java在字符与数组转换也是非常方便的。下面跟我一起来了
本文实例为大家分享了Java实现TCP互发消息的具体代码,供大家参考,具体内容如下TCP客户端:packagetcp;importjava.io.IOExcep
本文实例讲述了java简单网页抓取的实现方法。分享给大家供大家参考。具体分析如下:背景介绍一tcp简介 1tcp实现网络中点对点的传输 2传输是通过port