TCP通信的实现代码
TCP通信
概念
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
从百科定义中就可以看出,TCP通信的基本条件是连接,传输的是字节流。
- 通信基本流程(类似打招呼的方式):
1.三次握手
2.四次挥手
客户端
//客户端
public class TCPDemo01 {
public static void main(String[] args) throws Exception {
//1.要知道服务器的ip,端口号
InetAddress ip = InetAddress.getByName("127.0.0.1");//ip
int port = 9999;//端口号
//创建socket
Socket socket = new Socket(ip,port);
//发送消息
OutputStream os = socket.getOutputStream();
os.write("你好".getBytes());
//关闭资源
os.close();
socket.close();
}
}
服务端
//服务端
public class TCPDemo02 {
public static void main(String[] args) throws Exception {
//1.有一个端口号
ServerSocket serverSocket = new ServerSocket(9999);
//2.等待客户端连接
Socket socket = serverSocket.accept();//客户端的socket
//3.读取客户端消息
InputStream is = socket.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int len;
while ((len=is.read(buf))!=-1){
baos.write(buf,0,len);
}
System.out.println(baos.toString());
//关闭资源
baos.close();
is.close();
socket.close();
serverSocket.close();
}
}
- 用TCP协议实现上传文件到服务端
客户端
public class client01 {
public static void main(String[] args) throws Exception {
//1.获取服务端ip和端口
InetAddress ip = InetAddress.getByName("127.0.0.1");
int port = 9999;
//2.创建socket对象
Socket socket = new Socket(ip,port);
//3.获取输出流
OutputStream os = socket.getOutputStream();
//4.创建文件输入流
FileInputStream fis = new FileInputStream("F:/桌面文件/a.txt");
//5.写文件
byte[] buf = new byte[1024];//缓冲区
int len;
while ((len=fis.read(buf))!=-1){
os.write(buf,0,len);
}
//通知传输结束
socket.shutdownOutput();//输出完了
//等服务端接收完
InputStream is = socket.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf2 = new byte[1024];
int len2;
while ((len2=is.read(buf2))!=-1){
baos.write(buf2,0,len2);
}
System.out.println(baos.toString());
//6.关闭资源
baos.close();
is.close();
fis.close();
os.close();
socket.close();
}
}
服务端
public class servlet01 {
public static void main(String[] args) throws IOException {
//1.创建服务端接口
ServerSocket serverSocket = new ServerSocket(9999);
//2.等待连接
Socket socket = serverSocket.accept();
//3.输入流
InputStream is = socket.getInputStream();
//4.创建文件输出流
FileOutputStream fos = new FileOutputStream("receive.txt");
//5.输出文件
byte[] buf = new byte[1024];
int len;
while ((len=is.read(buf))!=-1){
fos.write(buf,0,len);
}
//通知客户端,接收完毕
OutputStream os = socket.getOutputStream();
os.write("接受完毕".getBytes());
//6.关闭资源
fos.close();
is.close();
socket.close();
serverSocket.close();
}
}
TCP通信的实现代码的更多相关文章
- TCP通信的客户端代码实现和TCP通信的服务器代码实现
TCP通信的客户端代码实现 package com.yang.Test.ServerStudy; import java.io.*; import java.net.Socket; /** * TCP ...
- 【Java TCP/IP Socket】基于NIO的TCP通信(含代码)
NIO主要原理及使用 NIO采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的I/O,即在等待连接.读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候, ...
- [C++] socket - 1 [简单TCP通信C\S代码]
服务端: #include<iostream> #include<winsock2.h> #include<stdio.h> #pragma comment(lib ...
- 【Java TCP/IP Socket】深入剖析socket——TCP通信中由于底层队列填满而造成的死锁问题(含代码)
基础准备 首先需要明白数据传输的底层实现机制,在http://blog.csdn.net/ns_code/article/details/15813809这篇博客中有详细的介绍,在上面的博客中,我们提 ...
- TCP通信服务端及客户端代码
Java TCP通信使用的是Socket(客服端)和ServerSocket(服务端),具体代码如下. server端代码: import java.io.BufferedReader; import ...
- 清晰易懂TCP通信原理解析(附demo、简易TCP通信库源码、解决沾包问题等)C#版
目录 说明 TCP与UDP通信的特点 TCP中的沾包现象 自定义应用层协议 TCPLibrary通信库介绍 Demo演示 未完成功能 源码下载 说明 我前面博客中有多篇文章讲到了.NET中的网络编程, ...
- JAVASE02-Unit010: 多线程基础 、 TCP通信
多线程基础 . TCP通信 * 当一个方法被synchronized修饰后,那么 * 该方法称为同步方法,即:多个线程不能同时 * 进入到方法内部执行. package day10; /** * 当多 ...
- 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)
1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...
- NetworkComms V3 使用TCP通信传递IList<T>类型的数据
客户端从服务器获取一组IList<T>类型的数据非常常见(通常从数据库中获取) 我们用NeworkComms V3来演示一下(NetworkcommsV2.x版本也同样支持) [ 使用pr ...
随机推荐
- 构建前端第10篇之---Function.prototype.call()
张艳涛写于2020-01-25,参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/ ...
- anyRTC 重磅推出在线实时 K 歌解决方案
在线音乐领域一直是各大资本巨头投资的热点,从抢占版权到现在的"云上之争", 主流平台的战火从版权资源转向创新领域扩延.而如今,在线K歌正在成为抢占"云音乐"市场 ...
- Netty入门(一):ByteBuf
网络数据的基本单位总是字节.Java NIO 提供了 ByteBuffer 作为它的字节容器,但是这个类使用起来过于复杂,而且也有些繁琐.Netty 的 ByteBuffer 替代品是 ByteBuf ...
- 使用vue实现用户管理 添加及删除功能
简单的管理系统-增删改查 添加及删除功能 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...
- Bugku-misc 1-8题总结
1.签到题 略过 2.这是一张单纯的图片 拉入winhex,在最后面有一段Uniocde编码,解码得到flag. 3.隐写 题目是隐写,binwalk打开分析 得到两个Zlib(提供数据压缩用的函式库 ...
- 35岁Android程序员被阿里辞退,生活压力太大痛哭,中年危机如何自救?
多数人都喜欢安逸的生活,尤其是随着年龄的增长,很多人都希望工作和生活趋于稳定,不愿意再让生活有很大的变动.可是,当达到一定的年龄时,危机还是存在的. 之前有一位阿里员工在脉脉上,晒出了自己被辞退的经历 ...
- Shell-05-函数
函数 函数定义 shell中函数的定义格式如下 [ function ] funname [()] { action; [return int;] } 说明: 1.可以带function fun() ...
- 【笔记】浅谈支持向量机(SVM)
SVM支持向量机 支持向量机的思想原理 使用支持向量机的思想,既可以解决回归问题,又可以解决分类问题 那么支持向量机的思想是什么? 已经知道逻辑回归这种算法的本质就是在一个平面中寻找决策边界,而分类算 ...
- Java中的形式参数和实际参数
一.概念 1.形式参数: 就是在定义函数或过程的时候命名的参数. 通俗讲就是一个记号. 2.实际参数: 就是在执行时,调用函数或过程时,传递给函数或过程的参数. 通俗讲就是实际值. 3.参数: 就是一 ...
- 【UGUI源码分析】Unity遮罩之RectMask2D详细解读
遮罩,顾名思义是一种可以掩盖其它元素的控件.常用于修改其它元素的外观,或限制元素的形状.比如ScrollView或者圆头像效果都有用到遮罩功能.本系列文章希望通过阅读UGUI源码的方式,来探究遮罩的实 ...