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通信的实现代码的更多相关文章

  1. TCP通信的客户端代码实现和TCP通信的服务器代码实现

    TCP通信的客户端代码实现 package com.yang.Test.ServerStudy; import java.io.*; import java.net.Socket; /** * TCP ...

  2. 【Java TCP/IP Socket】基于NIO的TCP通信(含代码)

    NIO主要原理及使用 NIO采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的I/O,即在等待连接.读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候, ...

  3. [C++] socket - 1 [简单TCP通信C\S代码]

    服务端: #include<iostream> #include<winsock2.h> #include<stdio.h> #pragma comment(lib ...

  4. 【Java TCP/IP Socket】深入剖析socket——TCP通信中由于底层队列填满而造成的死锁问题(含代码)

    基础准备 首先需要明白数据传输的底层实现机制,在http://blog.csdn.net/ns_code/article/details/15813809这篇博客中有详细的介绍,在上面的博客中,我们提 ...

  5. TCP通信服务端及客户端代码

    Java TCP通信使用的是Socket(客服端)和ServerSocket(服务端),具体代码如下. server端代码: import java.io.BufferedReader; import ...

  6. 清晰易懂TCP通信原理解析(附demo、简易TCP通信库源码、解决沾包问题等)C#版

    目录 说明 TCP与UDP通信的特点 TCP中的沾包现象 自定义应用层协议 TCPLibrary通信库介绍 Demo演示 未完成功能 源码下载 说明 我前面博客中有多篇文章讲到了.NET中的网络编程, ...

  7. JAVASE02-Unit010: 多线程基础 、 TCP通信

    多线程基础 . TCP通信 * 当一个方法被synchronized修饰后,那么 * 该方法称为同步方法,即:多个线程不能同时 * 进入到方法内部执行. package day10; /** * 当多 ...

  8. 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)

    1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...

  9. NetworkComms V3 使用TCP通信传递IList<T>类型的数据

    客户端从服务器获取一组IList<T>类型的数据非常常见(通常从数据库中获取) 我们用NeworkComms V3来演示一下(NetworkcommsV2.x版本也同样支持) [ 使用pr ...

随机推荐

  1. At 、Crontabl定时任务

    之前笔者是在本地写的博客,然后用 windows 定时任务启动写的脚本上传到 Github 上,现在又遇到了 Linux 上的定时任务,项目还要用到 Quartz 定时任务框架 1. 一次性定时任务 ...

  2. NODEJS对象

    1.全局对象 Node.js: global 交互模式下var声明的变量都属于全局下的变量,可以使用global访问,例如global.a 脚本模式下var声明的变量不属于全局下的变量.不能使用glo ...

  3. 手写Pascal解释器(一)

    目录 一.编写解释器的动机 二.part1 三.part2 四.part3 一.编写解释器的动机 学习了Vue之后,我发现对字符串的处理对于编写一个程序框架来说是非常重要的,就拿Vue来说,我们使用该 ...

  4. [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码

    [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码 更坏的阅读体验 定义 对于给定的一个网络,有向图中每个的边权表示可以通过的最大流量.假设出发点S水流无限大,求水流到终点T后的最大流量. 起 ...

  5. SVG和Canvas的区别?

    什么是SVG? SVG(可缩放矢量图形)编辑可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准. 什么是 Canvas ...

  6. C++ //多态案例三 ---电脑组装

    1 //多态案例三 ---电脑组装 2 3 #include <iostream> 4 #include <string> 5 using namespace std; 6 7 ...

  7. 还有更惨的吗?字节面经,美团,网易,招银,360全部在HR前一面挂了

    最近一朋友向我吐槽去年的秋招,字节面经,美团,网易,招银,360全部在HR前一面挂了,实在是有点惨.我把他语无伦次的话做了一个整理: 最近真的很暴躁,控制不住自己陷入情绪低落胡思乱想,每天都是在希望失 ...

  8. vim编辑文件时[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:

    ​​ ​ ​ 出现这个问题是因为你上次编辑的时候在没有保存的情况下退出了(如:电脑关机等)也有可能是有其他人在和你同时进行编辑行为(不同会话中).这是因为在用vim编辑的时候,vim会在打开文件目录下 ...

  9. 使用 C# 下载文件的十八般武艺

    文件下载是一个软件开发中的常见需求.本文从最简单的下载方式开始步步递进,讲述了文件下载过程中的常见问题并给出了解决方案.并展示了如何使用多线程提升 HTTP 的下载速度以及调用 aria2 实现非 H ...

  10. 【Vulnhub】 DC-4 靶机

    Vulnhub DC-4 一.环境搭建 下载链接:https://www.vulnhub.com/entry/dc-4,313/ 解压后用VMware打开,导入虚拟机 网卡配置看个人习惯,我喜欢NAT ...