TCP与UCP协议,及socket编程
TCP是Tranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作。
UDP是User 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编程相关推荐
- java socket 通信协议_java 基于TCP协议的Socket编程和通信
java 基于 TCP 协议的 Socket 编程和通信 在网络通讯中,第一次主动发起通讯的程序被称作客户 端 (Client) 程序, 简称客户端, 而在第一次通讯中等待连接的 程序被称作服务器端 ...
- 网络协议 11 - Socket 编程(下):眼见为实耳听为虚
网络协议 11 - Socket 编程(下):眼见为实耳听为虚 原文:网络协议 11 - Socket 编程(下):眼见为实耳听为虚 系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP ...
- Sockey编程之基于 UDP 协议的 Socket 编程
一.基于 UDP 协议的 Socket 编程 1.端口选择 已知端口:0~1023,为固定服务保留. 已注册的端口:1024~49151,供普通用户的普通用户进程或程序使用. 动态或私用端口: 491 ...
- TCP与UDP协议,socket套接字编程,通信相关操作
文章目录 TCP与UDP协议 TCP协议 ==三次握手== ==四次挥手== UDP协议 TCP与UDP的区别 应用层 socket套接字 代码优化 循环通信 半连接池 粘包问题 TCP与UDP协议 ...
- TCP与UDP协议、socket套接字编程、通信相关操作(cs架构软件)、TCP黏包问题及解决思路
OSI七层协议 传输层 1.PORT协议:前面讲过 2.TCP协议与UDP协议:规定了数据传输所遵循的规则(数据传输能够遵循的协议有很多,TCP和UDP是较为常见的两个) TCP协议 基于TCP传输数 ...
- delphi socket 流的使用_基于TCP协议的Socket编程和通信_单向通信
1.TCP:单向通信Socket之服务器端 import java.io.BufferedWriter; import java.io.IOException; import java.io.Outp ...
- Android之使用TCP和URL协议进行网络编程
手机本身是作为手机终端使用的,因此它的计算能力,存储能力都是有限的.它的主要优势是携带方便,可以随时打开,而且手机通常总是处于联网状态.因此网络支持对于手机应用非常重要. Android完全支持JDK ...
- 网络协议 11 - Socket 编程(下)
之前我们基本了解了网络通信里的大部分协议,一直都是在"听"的过程.很多人都会觉得,好像看懂了,但关了页面回忆起来,好像又什么都没懂.这次咱们就"真枪实弹"的码起 ...
- linux下tcp滑动窗口大小设置,转:TCP滑动窗口协议与socket缓冲区之间的关系
一.TCP的滑动窗口大小实际上就是socket的接收缓冲区大小的字节数 注意:在以Unix为核心的一些操作系统中(不一定都是),SO_RCVBUF选项确实决定了TCP窗口的大小.你设置为多少窗口就为多 ...
最新文章
- pyWavelets工具包的安装及使用
- UA MATH574M 统计学习II 二元分类
- HDU - 6118 度度熊的交易计划(最大费用可行流)
- python实现选择文件_python3实现文件选择对话框
- PHP foreach 小结
- Windows 下音频数据采集和播放
- 电脑键盘练习_用键盘打字怎样才能练得快,有什么窍门没?
- 优云数智UMCloud CTO王璞:IaaS+PaaS驱动私有云未来十年
- LeetCode刷题(32)
- 用python读取cifar-10与cifar-100图像数据
- c语言解析pcap,使用libpcap读取纳秒pcap文件
- 谷歌浏览器不能上网的解决办法之一
- 量子化学计算机理,量子化学计算在反应机理确证中的应用
- 手绘板的制作——重置与橡皮擦(2)
- Meta 开源早期 AI 翻译工具支持 200 种语言
- 阿里云-物联网MQConsumerSTS 订阅失效问题
- 计算机视觉(五)--图像全景拼接原理及实现
- MysqlWorkbench中无法显示表[tables could not be fetched]
- P1458 [USACO2.1]顺序的分数 Ordered Fractions
- Sparse Matrix, MUMPS