当前位置:网站首页>TCP通信程序
TCP通信程序
2022-08-02 03:24:00 【cierxiao】
#博学谷IT学习技术支持#
1.TCP发送数据
Java中的TCP通信
- Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信。
- Java为客户端提供了Socket类,为服务器端提供了ServerSocket类
构造方法
方法名 | 说明 |
---|---|
Socket(InetAddress address,int port) | 创建流套接字并将其连接到指定IP指定端口号 |
Socket(String host, int port) | 创建流套接字并将其连接到指定主机上的指定端口号 |
相关方法
方法名 | 说明 |
---|---|
InputStream getInputStream() | 返回此套接字的输入流 |
OutputStream getOutputStream() | 返回此套接字的输出流 |
示例代码
public class ClientDemo {
public static void main(String[] args) throws IOException {
//创建客户端的Socket对象(Socket)
//Socket(String host, int port) 创建流套接字并将其连接到指定主机上的指定端口号
Socket s = new Socket("127.0.0.1",10000);
//获取输出流,写数据
//OutputStream getOutputStream() 返回此套接字的输出流
OutputStream os = s.getOutputStream();
os.write("hello,tcp,我来了".getBytes());
//释放资源
s.close();
}
}
2.TCP接收数据
构造方法
方法名 | 说明 |
---|---|
ServletSocket(int port) | 创建绑定到指定端口的服务器套接字 |
相关方法
方法名 | 说明 |
---|---|
Socket accept() | 监听要连接到此的套接字并接受它 |
注意事项
- accept方法是阻塞的,作用就是等待客户端连接
- 客户端创建对象并连接服务器,此时是通过三次握手协议,保证跟服务器之间的连接
- 针对客户端来讲,是往外写的,所以是输出流
针对服务器来讲,是往里读的,所以是输入流 - read方法也是阻塞的
- 客户端在关流的时候,还多了一个往服务器写结束标记的动作
- 最后一步断开连接,通过四次挥手协议保证连接终止
三次握手和四次挥手
三次握手
四次挥手
示例代码
public class ServerDemo {
public static void main(String[] args) throws IOException {
//创建服务器端的Socket对象(ServerSocket)
//ServerSocket(int port) 创建绑定到指定端口的服务器套接字
ServerSocket ss = new ServerSocket(10000);
//Socket accept() 侦听要连接到此套接字并接受它
Socket s = ss.accept();
//获取输入流,读数据,并把数据显示在控制台
InputStream is = s.getInputStream();
byte[] bys = new byte[1024];
int len = is.read(bys);
String data = new String(bys,0,len);
System.out.println("数据是:" + data);
//释放资源
s.close();
ss.close();
}
}
3.TCP程序练习
案例需求
客户端:发送数据,接受服务器反馈
服务器:收到消息后给出反馈
案例分析
客户端创建对象,使用输出流输出数据
服务端创建对象,使用输入流接受数据
服务端使用输出流给出反馈数据
客户端使用输入流接受反馈数据
代码实现
// 客户端
public class ClientDemo {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1",10000);
OutputStream os = socket.getOutputStream();
os.write("hello".getBytes());
// os.close();如果在这里关流,会导致整个socket都无法使用
socket.shutdownOutput();//仅仅关闭输出流.并写一个结束标记,对socket没有任何影响
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while((line = br.readLine())!=null){
System.out.println(line);
}
br.close();
os.close();
socket.close();
}
}
// 服务器
public class ServerDemo {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10000);
Socket accept = ss.accept();
InputStream is = accept.getInputStream();
int b;
while((b = is.read())!=-1){
System.out.println((char) b);
}
System.out.println("看看我执行了吗?");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(accept.getOutputStream()));
bw.write("你谁啊?");
bw.newLine();
bw.flush();
bw.close();
is.close();
accept.close();
ss.close();
}
}
总结
本篇文章内容主要介绍了 TCP通信程序、 三次握手和四次挥手、 以及相应基础案例代码实现,以至更有效率地帮助我们进行开发。
好啦!本篇文章到这里就结束啦!大家好好练习便能运用自如,每一天都要加油呀!!!
🥰 🥰 🥰你的点赞是对我最大的鼓励。🥰 🥰 🥰
🥰 🥰 🥰你的收藏是对我文章的认可。️🥰 🥰 🥰
🥰 🥰 🥰你的关注是对我前进的动力。🥰 🥰 🥰
边栏推荐
- 环形链表---------约瑟夫问题
- 客户评分控件
- 枚举法方法:(leetcode1300)转变数组后最接近目标值的数组和
- URL模块
- [vite] Failed to parse source for import analysis because the content contains invalid JS syntax.
- DOM操作---放大镜案例
- ES6三点运算符、数组方法、字符串扩展方法
- URL module
- js takes the value of a feature at a certain position in the string, such as Huawei=> Huawei
- Circular linked list---------Joseph problem
猜你喜欢
随机推荐
【我的创作纪念日】 3周年
[Learning Records of Boxue Valley] Super summary, share with heart | Software Testing Interface Testing Basics
1.8今日学习
Phospholipid-polyethylene glycol-hydrazide, DSPE-PEG-Hydrazide, DSPE-PEG-HZ, MW: 5000
meime module
[Mianjing] Mihayou data development on one side and two sides
Circular linked list---------Joseph problem
C语言的变长数组
pyppeteer使用样例脚本
js预编译 GO 和AO
String comparison size in MySQL (date string comparison problem)
4.14到新公司的一天
ES6迭代器解释举例
Advanced gradient of skeleton effect, suitable for waiting for pictures
骨架效果 之高级渐变,适用图片等待时
页面加载流程
uniapp | 官方提供的map组件使用问题
canvas--饼状图
简单黑马头条项目
The usage of json type field in mysql