与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. 【转载】浅谈大规模k8s集群关于events的那些坑

    原文链接:一流铲屎官二流程序员[浅谈大规模k8s集群关于events的那些坑] 背景 随着k8s集群规模的增加,集群内的object数量也与日俱增,那么events的数量也会伴随其大量增加,那么当用户 ...

  2. Visual Studio Installer下载速度为0处理办法

    DNS改为:223.5.5.5即可. 223.5.5.5 下载完成后记得改回来.

  3. 6000字Locust入门详解

    目录 一.Locust 性能测试 (一). 性能测试工具 主流性能测试工具对比 认识Locust (二) locust 基本用法 1.安装locust 2.编写用例 3. 启动测试 GUI 模式启动 ...

  4. SAP JSON 格式化及解析。

    一.首选:/ui2/cl_json     {'key':'value'} /ui2/cl_json=>deserialize( EXPORTING json = json CHANGING d ...

  5. 为什么不建议使用自定义Object作为HashMap的key?

    此前部门内的一个线上系统上线后内存一路飙高.一段时间后直接占满.协助开发人员去分析定位,发现内存中某个Object的量远远超出了预期的范围,很明显出现内存泄漏了. 结合代码分析发现,泄漏的这个对象,主 ...

  6. springboot集成swagger2报Illegal DefaultValue null for parameter type integer

    springboot集成swagger2,实体类中有int类型,会报" Illegal DefaultValue null for parameter type integer"的 ...

  7. javaWeb,web服务器

    一. 1.ASP 国内最早最流行的语言就是ASP:微软研发 在HTML中嵌套了VB脚本,ASP+COM(网页元素) 在ASP开发中,基本一个业务就有几千行代码,页面机器混乱 维护成本高 <h1& ...

  8. MySQL--数据过滤(AND、OR、IN、NOT操作符)

    MySQL允许给出多个WHERE子句.这些子句可以两种方式使用:以AND子句的方式或OR子句的方式使用. 1.组合WHERE子句 1.1 AND操作符 SELECT prod_id,prod_pric ...

  9. 4-10 CS后台项目练习-3 || Redis

    13. 类别管理--根据id查询类别详情--持久层 13.1. 规划SQL语句 本次需要执行的SQL语句大致是: select * from pms_category where id=? 关于字段列 ...

  10. tsconfig常用配置全解

    include, exclude, files配置项 extends配置 compilerOptions下的配置 compilerOptions.allowUnreachableCode compil ...