TCPTranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作。

UDPUser Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

UDP:1,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。

2,UDP传输数据时是大小限制的,每个被传输的数据报必须限定在64KB之内

3,UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方

TCP:1,面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中需要连接

时间。

2,TCP传输数据大小限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大的

数据。

3,TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。

代码:服务器端:

package com.liuxin.test;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class SocketServer {public static void main(String args[]){ServerSocket ss=null;try {ss=new ServerSocket(4700);} catch (IOException e) {System.err.println("can not listen to"+e);}Socket socket=null;try {socket=ss.accept();//有请求则创建一个Socket对象,并继续执行} catch (IOException e) {System.err.println(e);}try {BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream(),"gbk"));//把socket的输入流内容放到br对象中PrintWriter pw=new PrintWriter(socket.getOutputStream()); //把socket的输出流内容放到pw对象中BufferedReader sin=new BufferedReader(new InputStreamReader(System.in,"gbk"));//由系统标准输入设备构造BufferedWrite对象System.out.println("client:"+br.readLine());//打印客户端输入的文字String line=sin.readLine();while(!line.equals("bye")){//读取到bye则停止循环pw.println(line);pw.flush();//刷新输出流,使client马上收到该字符串System.out.println("Server:"+line);System.out.println("Client:"+br.readLine());//从Client读入一字符串,并打印到标准输出上line=sin.readLine();//从系统标准输入读入一字符串}pw.close(); //关闭Socket输出流br.close(); //关闭Socket输入流socket.close(); //关闭Socketss.close(); //关闭ServerSocket} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

客户端:

package com.liuxin.test;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;public class TalkClient {public static void main(String args[]) {try{Socket socket=new Socket("127.0.0.1",4700);//向本机的4700端口发出客户请求BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));//由系统标准输入设备构造BufferedReader对象PrintWriter os=new PrintWriter(socket.getOutputStream());//由Socket对象得到输出流,并构造PrintWriter对象BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));//由Socket对象得到输入流,并构造相应的BufferedReader对象String readline;readline=sin.readLine(); //从系统标准输入读入一字符串while(!readline.equals("bye")){//若从标准输入读入的字符串为 "bye"则停止循环os.println(readline);//将从系统标准输入读入的字符串输出到Serveros.flush();//刷新输出流,使Server马上收到该字符串System.out.println("Client:"+readline);//在系统标准输出上打印读入的字符串System.out.println("Server:"+is.readLine());//从Server读入一字符串,并打印到标准输出上readline=sin.readLine(); //从系统标准输入读入一字符串} //继续循环os.close(); //关闭Socket输出流is.close(); //关闭Socket输入流socket.close(); //关闭Socket}catch(Exception e) {System.out.println("Error"+e); //出错,则打印出错信息}}
}

TCP与UCP协议,及socket编程相关推荐

  1. java socket 通信协议_java 基于TCP协议的Socket编程和通信

    java 基于 TCP 协议的 Socket 编程和通信 在网络通讯中,第一次主动发起通讯的程序被称作客户 端 (Client) 程序, 简称客户端, 而在第一次通讯中等待连接的 程序被称作服务器端 ...

  2. 网络协议 11 - Socket 编程(下):眼见为实耳听为虚

    网络协议 11 - Socket 编程(下):眼见为实耳听为虚 原文:网络协议 11 - Socket 编程(下):眼见为实耳听为虚 系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP ...

  3. Sockey编程之基于 UDP 协议的 Socket 编程

    一.基于 UDP 协议的 Socket 编程 1.端口选择 已知端口:0~1023,为固定服务保留. 已注册的端口:1024~49151,供普通用户的普通用户进程或程序使用. 动态或私用端口: 491 ...

  4. TCP与UDP协议,socket套接字编程,通信相关操作

    文章目录 TCP与UDP协议 TCP协议 ==三次握手== ==四次挥手== UDP协议 TCP与UDP的区别 应用层 socket套接字 代码优化 循环通信 半连接池 粘包问题 TCP与UDP协议 ...

  5. TCP与UDP协议、socket套接字编程、通信相关操作(cs架构软件)、TCP黏包问题及解决思路

    OSI七层协议 传输层 1.PORT协议:前面讲过 2.TCP协议与UDP协议:规定了数据传输所遵循的规则(数据传输能够遵循的协议有很多,TCP和UDP是较为常见的两个) TCP协议 基于TCP传输数 ...

  6. delphi socket 流的使用_基于TCP协议的Socket编程和通信_单向通信

    1.TCP:单向通信Socket之服务器端 import java.io.BufferedWriter; import java.io.IOException; import java.io.Outp ...

  7. Android之使用TCP和URL协议进行网络编程

    手机本身是作为手机终端使用的,因此它的计算能力,存储能力都是有限的.它的主要优势是携带方便,可以随时打开,而且手机通常总是处于联网状态.因此网络支持对于手机应用非常重要. Android完全支持JDK ...

  8. 网络协议 11 - Socket 编程(下)

    之前我们基本了解了网络通信里的大部分协议,一直都是在"听"的过程.很多人都会觉得,好像看懂了,但关了页面回忆起来,好像又什么都没懂.这次咱们就"真枪实弹"的码起 ...

  9. linux下tcp滑动窗口大小设置,转:TCP滑动窗口协议与socket缓冲区之间的关系

    一.TCP的滑动窗口大小实际上就是socket的接收缓冲区大小的字节数 注意:在以Unix为核心的一些操作系统中(不一定都是),SO_RCVBUF选项确实决定了TCP窗口的大小.你设置为多少窗口就为多 ...

最新文章

  1. pyWavelets工具包的安装及使用
  2. UA MATH574M 统计学习II 二元分类
  3. HDU - 6118 度度熊的交易计划(最大费用可行流)
  4. python实现选择文件_python3实现文件选择对话框
  5. PHP foreach 小结
  6. Windows 下音频数据采集和播放
  7. 电脑键盘练习_用键盘打字怎样才能练得快,有什么窍门没?
  8. 优云数智UMCloud CTO王璞:IaaS+PaaS驱动私有云未来十年
  9. LeetCode刷题(32)
  10. 用python读取cifar-10与cifar-100图像数据
  11. c语言解析pcap,使用libpcap读取纳秒pcap文件
  12. 谷歌浏览器不能上网的解决办法之一
  13. 量子化学计算机理,量子化学计算在反应机理确证中的应用
  14. 手绘板的制作——重置与橡皮擦(2)
  15. Meta 开源早期 AI 翻译工具支持 200 种语言
  16. 阿里云-物联网MQConsumerSTS 订阅失效问题
  17. 计算机视觉(五)--图像全景拼接原理及实现
  18. MysqlWorkbench中无法显示表[tables could not be fetched]
  19. P1458 [USACO2.1]顺序的分数 Ordered Fractions
  20. Sparse Matrix, MUMPS

热门文章

  1. java 双色球机选法程序分析
  2. PSD模版如何变成网页模版
  3. 电销外呼系统是如何实现防封号的?
  4. tf.data 加载 pandas dataframes
  5. LAM 的安装和配置
  6. 企业建网站需要注意什么SEO问题
  7. 2020年T电梯修理考试资料及T电梯修理考试技巧
  8. 2021年T电梯修理答案解析及T电梯修理考试申请表
  9. java 加载驱动3种方法_加载jdbc驱动程序的三种不同方式
  10. 解决Windows提示缺少msxml6r.dll文件的问题