UDP与TCP
网络模型分为OSI参考模型和TCP/IP参考模型


两台主机之间传输联系

TCP和UDP就是传输层的东西。叫做传输控制协议和用户数据报协议两者的区别是

网络通信底层通过Socket实现。

UDP:Socket对象用DatagramSocket封装,构造方法如下

数据报对象用DatagramPacket封装

TCP 客户端 用 Sokect类进行封装。
服务器端用 SeverSokect类进行封装。
而网络互联需要Ip地址,ip地址在java里面用InetAddress类进行封装。
UDP
UDP我们平常用的QQ就是这样,他不需要知道你在不在线,只要把东西发给你就好。基于UDP做一个小的聊天室,代码贴在下面
UDP的数据源和目的都封装在数据报中,只需要发送和接收数据报就可以
//发送方
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress; public class Send implements Runnable {
private DatagramSocket ds; public Send(DatagramSocket ds) {
this.ds = ds;
} public void run() {
try {
BufferedReader bf = new BufferedReader(new InputStreamReader(
System.in));
String line = null; while ((line = bf.readLine()) != null) {
byte[] buf=line.getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("localhost"), 12002);
ds.send(dp);
if("再见".equals(line))
break; }
ds.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
//接收方
import java.net.DatagramPacket;
import java.net.DatagramSocket; public class Recive implements Runnable {
private DatagramSocket ds; public Recive(DatagramSocket ds) {
this.ds = ds;
} public void run() {
try {
while (true) {
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.receive(dp);
String ip = dp.getAddress().getHostAddress();
String text=new String(dp.getData(), 0, dp.getLength());
System.out.println(ip + ":" + text);
if (text.equals("再见")) {
System.out.println(ip + "退出聊天室");
}
}
} catch (Exception e) {
e.printStackTrace();
}
} }
import java.net.DatagramSocket;
import java.net.SocketException; public class Run {
public static void main(String[] args) throws SocketException {
DatagramSocket send=new DatagramSocket();
DatagramSocket recive=new DatagramSocket(12002);
new Thread(new Send(send)).start();
new Thread(new Recive(recive)).start();
}
}
基于多线程的实现,在一个窗口内既可以接收也可以发送。
TCP
TCP协议呢需要建立连接,建立连接以后才能通信,那怎么通信呢?必然是通过流。
建立一个基于TCP协议来实现的小聊天室。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException; public class Client{
public static void main(String[] args) throws UnknownHostException, IOException{
Socket s=new Socket(InetAddress.getByName("localHost"), 10002); PrintWriter p=new PrintWriter(s.getOutputStream(),true);
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=bf.readLine())!=null){
p.println(line);
if("再见".equals(line))
break; }
s.close();
bf.close();
}
}

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException; public class Server{
public static void main(String[] args) throws UnknownHostException, IOException{
Socket s=new Socket(InetAddress.getByName("localHost"), 10002); PrintWriter p=new PrintWriter(s.getOutputStream(),true);
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=bf.readLine())!=null){
p.println(line);
if("再见".equals(line))
break; }
s.close();
bf.close();
}
}
UDP与TCP的更多相关文章
- 移动端IM系统的协议选型:UDP还是TCP?
1.前言 对于有过网络编程经验的开发者来说,使用何种数据传输层协议来实现数据的通信,是个非常基础的问题,它涉及到你的第一行代码该如何编写. 从PC时代的IM开始,IM开发者就在为数据传输协议的选型争论 ...
- RUDP之一 —— UDP VS TCP
原文链接 原文:http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/ 介绍 大家好,我是Glenn Fiedler, ...
- 第五章 运输层(UDP和TCP三次握手,四次挥手分析)
序言 通过这章,可以知道其实三次握手和四次挥手其实真的好简单,通过这章的学习,我相信你也会同样的认为,以后在也不需要听到别人问三次握手的过程而自己一脸懵逼了,觉得人家好屌,其实也就是他懂你不懂,仅 ...
- 网游中的网络编程系列1:UDP vs. TCP
原文:UDP vs. TCP,作者是Glenn Fiedler,专注于游戏网络编程相关工作多年. 目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网 ...
- DNS分别在什么情况下使用UDP和TCP
DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类.但很少有人知道DNS分别在什么情况下使用这两种协议. 如果用wiresha ...
- JAVA基础学习day24--Socket基础一UDP与TCP的基本使用
一.网络模型 1.1.OIS参考模型 1.2.TCP/IP参考模型 1.3.网络通讯要素 IP地址:IPV4/IPV6 端口号:0-65535,一般0-1024,都被系统占用,mysql:3306,o ...
- 初识-----基于Socket的UDP和TCP编程及测试代码
一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...
- 通信协议之HTTP,UDP,TCP协议
1.UDP,TCP,HTTP之间的关系 tcp/ip是个协议组,它可以分为4个层次,即网路接口层,网络层,传输层,以及应用层, 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协 ...
- Http UDP还是TCP
http://1024monkeys.wordpress.com/2014/04/01/game-servers-udp-vs-tcp/ 在编写网络游戏的时候,到底使用UDP还是TCP的问题迟早都要面 ...
- 游戏服务器:到底使用UDP还是TCP
http://blog.jobbole.com/64638/ 在编写网络游戏的时候,到底使用UDP还是TCP的问题迟早都要面对. 一般来说你会听到人们这样说:“除非你正在写一个动作类游戏,否则你就用T ...
随机推荐
- java Map按Key排序
public static void main(String[] args) { Map<String, String> map = new TreeMap<String, Stri ...
- JavaMail在Windows平台下正常发送邮件,部署到Linux后则发送失败
问题: 在本机(Windows)环境下可以成功发送邮件,但部署到Linux服务器上后不能成功发送,前台不提示错误或提示502. linux下日志提示:javamail isssl false.... ...
- ***小程序wx.getUserInfo不能弹出授权窗口后的解决方案
微信更新api后,wx.getUserInfo在开发和体验版本都不能弹出授权窗口.微信文档说明: 注意:此接口有调整,使用该接口将不再出现授权弹窗,请使用 <button open-type=& ...
- WPF编程之找不到资源mainWindow.xaml
原文: WPF编程之找不到资源“window1.xaml”之谜 因为将启动窗口移动到了一个新建的文件夹中,启动调试时报找不到资源mainWindow.xaml,原来是App.xaml里面设置的启动窗口 ...
- linux操作系统中oracle数据库的密码过期问题解决
1:首先确定linux登录的用户是root 切换到数据库用户 su oracle(切记,如果这里su oracle不可以,那么就使用此命令su - oracle,这个命令切换到数据库用户肯定可以成功. ...
- Multi label 多标签分类问题(Pytorch,TensorFlow,Caffe)
适用场景:一个输入对应多个label,或输入类别间不互斥 调用函数: 1. Pytorch使用torch.nn.BCEloss 2. Tensorflow使用tf.losses.sigmoid_cro ...
- 使用Eclipse绑定Tomcat并发布应用
l 步骤1:获得服务器运行环境配置,Window/Preferences/Server/Runtime Environmen l步骤2:添加服务器 l步骤3:选择服务器在硬盘的地址,然后所有的都是确定 ...
- C# 之 下载EXCEL文件,自动用迅雷下载aspx
在浏览器中导出 Excel 得时候,如果浏览器绑定了迅雷,则会下载aspx文件. 解决:下载EXCEL文件,自动用迅雷下载aspx if (Request.QueryString["id&q ...
- 前端接口自动化测试工具-DOClever使用介绍(转载)
DOClever 不仅集成了文档编写,团队协作,接口运行,mock 数据等功能,还有两个功能是让我们团队大大的提高工作效率的.一个是接口的自动化生成,可以根据接口数据自动生成文档信息,还有一个便是本文 ...
- Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第十一集之安装FastDFS】
1,安装FastDFS之前,先安装libevent工具包. yum -y install libevent 2,安装libfastcommonV1.0.7工具包.有可能找到新版本的zip压缩包:lib ...