与UDP不同的是,TCP协议使用的是Socket,而不是DatagramSocket,这是要作区分的。

构造Socket对象的时候,可以直接指定ip地址与端口号。此时需要抛出异常。

import java.net.Socket;
public class TCP_Send {
public static void main(String[] args) throws Exception {
//TCP使用的是Socket
Socket s = new Socket("127.0.0.1",8989);
}
}

当我们运行起来的时候,直接就报出一堆异常了。

这就是TCP协议和我们之前的UDP协议的不同了。

TCP是需要建立连接,才能实现通信。

值得注意的是,在TCP协议中,我们这样规定:(可能有悖于直觉)

发送端:客户端

接收端:服务器端

具体原因我们后面再具体讲解。


在TCP协议中,我们通过“流”来传输数据,“流”的优点是可以传输大量的数据。

而UDP协议所使用的“包”DatagramPacket是有大小限制的。

下面就是我们开发出来的发送端了,也就是客户端:

import java.io.OutputStream;
import java.net.Socket; public class TCP_Send {
public static void main(String[] args) throws Exception {
//TCP使用的是Socket
Socket s = new Socket("127.0.0.1",8989); OutputStream ops = s.getOutputStream(); ops.write("你好我是remoo,我使用TCP协议发送一段文字".getBytes()); s.close();
//注,ops 可以不用关闭,Socket会自动帮我们关闭。
}
}

下面我们开发接收端,也就是服务端:

在接收端我们使用ServerSocket。

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket; public class TCP_Receive {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(8989); Socket clinet = ss.accept();//会暂停,等待连接! InputStream input = clinet.getInputStream(); byte[] buf = new byte[1024];
int length = input.read(buf); String s = new String(buf,0,length);
System.out.println(s); clinet.close();
ss.close();
//输入输出流,Socket会自动帮我们关闭
}
}

如何实现循环发送、接收呢?

服务器-接收端代码:

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket; public class TCP_Receive {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(8989); Socket clinet = ss.accept();//会暂停,等待连接! InputStream input = clinet.getInputStream(); byte[] buf = new byte[1024];
while(true){
int length = input.read(buf);
System.out.println(new String(buf,0,length));
} // clinet.close();
// ss.close();
//输入输出流,Socket会自动帮我们关闭
}
}

客户端

import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner; public class TCP_Send {
public static void main(String[] args) throws Exception {
//TCP使用的是Socket
Socket s = new Socket("127.0.0.1",8989); OutputStream ops = s.getOutputStream(); Scanner sc = new Scanner(System.in); while (true){
ops.write(sc.next().getBytes());
}
//ops.close(); }
}

效果:

【Java】学习路径56-TCP协议 发送、接收的更多相关文章

  1. 网络编程--使用TCP协议发送接收数据

    package com.zhangxueliang.tcp; import java.io.IOException; import java.io.OutputStream; import java. ...

  2. Java基础知识强化之网络编程笔记06:TCP之TCP协议发送数据 和 接收数据

    1. TCP协议发送数据 和 接收数据 TCP协议接收数据:• 创建接收端的Socket对象• 监听客户端连接.返回一个对应的Socket对象• 获取输入流,读取数据显示在控制台• 释放资源 TCP协 ...

  3. Java学习路径及练手项目合集

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 实验楼上的[Java 学习路径]中将首先完成 Java基础.JDK.JDBC.正则表达式等基础实验,然后进阶到 J2SE ...

  4. Java学习路径(抛光砖)

    这就是我刚刚在五孔问答中找到的Java学习路线图抛光砖价格.我个人认为,这条Java学习路线是可以的.它是2018年相对较新的Java学习路线,更符合企业就业标准. Java学习路径的第一阶段:Jav ...

  5. 【Java】学习路径58-TCP聊天-双向发送实现

    这一章内容比较复杂(乱) 重点在于解决利用TCP协议实现双向传输. 其余的细节(比如end)等,不需要太在意. 但是我也把折腾经历写出来了,如果大家和我遇到了类似的问题,下文可以提供一个参考. 目标: ...

  6. TCP/IP详解学习笔记(9)-TCP协议概述

    终于看到了TCP协议,这是TCP/IP详解里面最重要也是最精彩的部分,要花大力气来读.前面的TFTP和BOOTP都是一些简单的协议,就不写笔记了,写起来也没啥东西. TCP和UDP处在同一层---运输 ...

  7. c# tcp协议发送数据

    private void tcp_send(string data)//tcp协议转发数据 { TcpClient tcpClient = new TcpClient(); tcpClient.Con ...

  8. Java学习路径:不走弯路,这是一条捷径

    1.如何学习编程? JAVA是一种平台.也是一种程序设计语言,怎样学好程序设计不只适用于JAVA,对C++等其它程序设计语言也一样管用.有编程高手觉得,JAVA也好C也好没什么分别,拿来就用.为什么他 ...

  9. Thinking in Java学习杂记(5-6章)

    Java中可以通过访问控制符来控制访问权限.其中包含的类别有:public, "有好的"(无关键字), protected 以及 private.在C++中,访问指示符控制着它后面 ...

  10. Linux2.6内核协议栈系列--TCP协议2.接收

    1.排队机制 接收输入TCP报文时,有三个队列: ● 待处理队列 ● 预排队队列 ● 接收队列 接收队列包含了处理过的TCP数据段,也就是说,去除了全部的协议头,正准备将数据复制到用户应用程序.接收队 ...

随机推荐

  1. 使用SSH连接Windows Server 2019 Core

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月7日. 一.说明 Windows Server 2019 Core,是纯命令行的Windows Server版本,没有办法使用GU ...

  2. Acwing787.归并排序

    Acwing787.归并排序 归并模板 归并排序,合二为一 题目链接:Acwing787.归并排序 #include<iostream> using namespace std; cons ...

  3. Java-调用R语言和调用Python(前后端展示)

    1. 背景 R语言和Python用于数据分析和数据处理,并生成相应的直方图和散点图 需要实现一个展示平台,后端使用Java,分别调用R语言和调用Python,并返回数据和图给前端显示 这个平台主要实现 ...

  4. Sentinel-流量防卫兵

    1.背景 1.1 简介 Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性. Sentinel 具有以下特征 丰富的应用场景:Sentinel 承接了阿里巴 ...

  5. AI 企业多云存储架构实践 | 深势科技分享

    2020 年末,谷歌旗下 DeepMind 研发的 AI 程序 AlphaFold2 在国际蛋白质结构预测竞赛上取得惊人的准确度,使得" AI 预测蛋白质结构"这一领域受到了空前的 ...

  6. datax开启hana支持以及dolphinscheduler开启datax任务

    datax开启hana支持以及dolphinscheduler开启datax任务 前面(@,@) 前段时间因为要做异构数据导入导出,所以搜了下,发现这类工具收费的居多,使用起来未必趁手~ 于是我找了下 ...

  7. 挑战30天写操作系统-day1-从计算机结构到汇编程序入门

    先动手操作 软盘映像文件制作:先采用二进制编辑器编辑我们所需要的映像文件helloos.img 二进制编辑器下载链接:Bz - c.mos (vcraft.jp) 制作好之后,可以选择写入软盘,通过软 ...

  8. 无用的IP黑名单

    无效的IP黑名单,有些还没有收集,在阿里云或者腾讯云的安全组里面设置,拦截不必要的IP,免得遭到攻击,也避免的CPU和内存过高 来源 备注82.102.21.217 拒绝 随机访问目录攻击,频繁69. ...

  9. 如何在Excel/WPS表格中批量查询快递信息?

    如何在Excel/WPS表格中批量查询快递信息? 干电商的小伙伴们还在为如何批量查询快递物流信息发愁吗?别着急,这篇文章或许能够帮助到您. 首先给大家看一下查询的具体成果: 第一步:安装Excel网络 ...

  10. ORM框架介绍——什么是ORM框架?

    1.什么是ORM?对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.ORM框架是连接数据库的桥梁,只要提供 ...