import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException; /* UDP通讯协议的特点:
1. 将数据极封装为数据包,面向无连接。
2. 每个数据包大小限制在64K中
3.因为无连接,所以不可靠
4. 因为不需要建立连接,所以速度快
5.udp 通讯是不分服务端与客户端的,只分发送端与接收端。 TCP通讯协议特点:
1. tcp是基于IO流进行数据 的传输 的,面向连接。
2. tcp进行数据传输的时候是没有大小限制的。
3. tcp是面向连接,通过三次握手的机制保证数据的完整性。 可靠协议。
4. tcp是面向连接的,所以速度慢。
5. tcp是区分客户端与服务端 的。 比如: 打电话、 QQ\feiQ的文件传输、 迅雷下载.... tcp协议下的Socket:
Socket(客户端) , tcp的客户端一旦启动马上要与服务端进行连接。
ServerSocket(服务端类) tcp的客户端使用步骤:
1. 建立tcp的客户端服务。
2. 获取到对应的流对象。
3.写出或读取数据
4. 关闭资源。 */ //tcp客户端
public class Demo1Clinet { public static void main(String[] args) throws IOException{
//建立tcp的服务
Socket socket = new Socket(InetAddress.getLocalHost(),9090);
//获取到Socket的输出流对象
OutputStream outputStream = socket.getOutputStream();
//利用输出流对象把数据写出即可。
outputStream.write("服务端你好".getBytes()); //获取到输入流对象,读取服务端回送的数据。
InputStream inputStream = socket.getInputStream();
byte[] buf = new byte[1024];
int length = inputStream.read(buf);
System.out.println("客户端接收到的数据:"+ new String(buf,0,length)); //关闭资源
socket.close();
}
}
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; //tcp的服务端
/*
java.net.BindException: 端口被占用。 ServerSocket的使用 步骤
1. 建立tcp服务端 的服务。
2. 接受客户端的连接产生一个Socket.
3. 获取对应的流对象读取或者写出数据。
4. 关闭资源。 为什么ServerSocket不设计一个getInputStream与getOutputStream 呢? */
//服务端
public class Demo1Server { public static void main(String[] args) throws Exception {
//建立Tcp的服务端,并且监听一个端口。
ServerSocket serverSocket = new ServerSocket(9090);
//接受客户端的连接
Socket socket = serverSocket.accept(); //accept() 接受客户端的连接 该方法也是一个阻塞型的方法,没有客户端与其连接时,会一直等待下去。
//获取输入流对象,读取客户端发送的内容。
InputStream inputStream = socket.getInputStream();
byte[] buf = new byte[1024];
int length = 0;
length = inputStream.read(buf);
System.out.println("服务端接收:"+ new String(buf,0,length)); //获取socket输出流对象,想客户端发送数据
OutputStream outputStream = socket.getOutputStream();
outputStream.write("客户端你好啊!".getBytes()); //关闭资源
serverSocket.close(); } }

tcp协议下的Socket的更多相关文章

  1. TCP协议下大数据传输IOCP乱序问题

    毕业后稀里糊涂的闭门造车了两年,自己的独立博客也写了两年,各种乱七八糟,最近准备把自己博客废了,现在来看了下这两年写的对我来说略微有点意义的文章只此一篇,转载过来以作留念. 写的很肤浅且凌乱,请见谅. ...

  2. TCP协议下的服务端并发,GIL全局解释器锁,死锁,信号量,event事件,线程q

    TCP协议下的服务端并发,GIL全局解释器锁,死锁,信号量,event事件,线程q 一.TCP协议下的服务端并发 ''' 将不同的功能尽量拆分成不同的函数,拆分出来的功能可以被多个地方使用 TCP服务 ...

  3. TCP协议下Socket的基础编程类型

    套接字的基本操作有: 创建(socket).命名(bind).侦听(listen).连接(accept).关闭(shutdown).发送(send).接受(recv). 下面逐个分析: 一.创建(so ...

  4. TCP协议和UDP协议下的socket

    UDP协议的服务端和客户端: ##udp_服务端 import socket udp_server = socket.socket(type=socket.SOCK_DGRAM)#选择udp协议 ip ...

  5. 基于Tcp协议的简单Socket通信实例(JAVA)

    好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. ...

  6. 《java入门第一季》之tcp协议下的网络编程

    tcp协议相对于udp更加安全. 首先看一下需求:服务器端开启,多个客户端同时向服务器发送数据,看哪个客户端先到达. 说明:这里我开启三个电脑实验,一台电脑写服务器端的程序,两台电脑开客户端的程序.服 ...

  7. 基于tcp协议下粘包现象和解决方案,socketserver

    一.缓冲区 每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区.write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送 ...

  8. 在TCP协议下的数据传送

    本人小白菜逼一枚,,,,刚建立博客,也写不了太深入的,就写点上课的笔记什么的.有错误希望广大博友指出,我一定虚心学习接收改正. 我的新浪邮箱:liudaohui0805@sina.com 我的QQ邮箱 ...

  9. tcp协议下粘包问题的产生及解决方案

    1 tcp有粘包及udp无粘包 - TCP 是面向连接的,面向流的可靠协议:发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据, 合并成 ...

随机推荐

  1. ORA-09925:Unable to create audit trail file 数据库启动失败

    问题描述:生产库停机加内存和CPU,重启完服务器,启动数据库报错. ORA-09925: Unable to create audit trail file Linux-x86_64 Error 2: ...

  2. 大厂必问的Spring面试题

    准备了一个月的八股文,经历了二十几场秋招面试之后,发现Spring很受面试官青睐.最近有空将Spring常见的面试题总结了一下,希望对大家有所帮助. 文章目录: Spring的优点 Spring 用到 ...

  3. Spring 处理请求和响应相关的注解

    @Controller 默认返回 templates 目录下的 string.html 页面内容. 在方法中加上 @ResponseBody 注解,可以返回JSON.XML或自定义mediaType的 ...

  4. Docker 安装mysql主从

    安装docker 1.yum -y install docker 2.查看是否安装成功 docker -v 3.接着将docker后台启动 systemctl start docker.service ...

  5. mybatis(1.2)

    为什么执行sql语句后 数据库表中不会更新 需要我们手动配置  两种方法 如下: 1:调用SqlSession接口的commit方法 2:获取Session的时候  SqlSessionFactory ...

  6. lvgl移植—Linux fbdev&evdev(基于LVGL v7)

    虽然lvgl官方提供了有关linux framebuffer操作的库函数,但是我决定自己试一下能否自己实现这部分操作 实际项目中应优先采用官方库函数,官方实现代码位于文件夹lv_drivers/dis ...

  7. 运行flutter-填坑之旅

    运行flutter; 1.有一个问题,解决了好长时间 如果你安装了IntelliJ IDEA 2017.2.7 x64,运行flutter的时候报错,是因为IntelliJ IDEA 2017.2.7 ...

  8. 微服务架构 | 3.2 Alibaba Nacos 注册中心

    目录 前言 1. Nacos 基础知识 1.1 Nacos 命名方式 1.2 Nasoc 是什么 1.3 Nacos 的 4 个关键特性 1.4 Nacos 生态图 1.5 Nacos 架构图 1.6 ...

  9. leetcode 718. 最长重复子数组

    问题描述 给两个整数数组 A 和 B ,返回两个数组中公共的.长度最长的子数组的长度. 示例: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出:3 解释: 长度最长的公共子数 ...

  10. Matlab R2019b安装中的问题

    1.licens文件以及dll文件的放置 MATLAB的安装镜像文件放置在D:\MATLAB,我们MATLAB安装在D:\MATLAB2019B,在激活过程中,我们需要破解文件夹中的license_s ...