网络模型分为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的更多相关文章

  1. 移动端IM系统的协议选型:UDP还是TCP?

    1.前言 对于有过网络编程经验的开发者来说,使用何种数据传输层协议来实现数据的通信,是个非常基础的问题,它涉及到你的第一行代码该如何编写. 从PC时代的IM开始,IM开发者就在为数据传输协议的选型争论 ...

  2. RUDP之一 —— UDP VS TCP

    原文链接 原文:http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/ 介绍 大家好,我是Glenn Fiedler, ...

  3. 第五章 运输层(UDP和TCP三次握手,四次挥手分析)

    序言   通过这章,可以知道其实三次握手和四次挥手其实真的好简单,通过这章的学习,我相信你也会同样的认为,以后在也不需要听到别人问三次握手的过程而自己一脸懵逼了,觉得人家好屌,其实也就是他懂你不懂,仅 ...

  4. 网游中的网络编程系列1:UDP vs. TCP

    原文:UDP vs. TCP,作者是Glenn Fiedler,专注于游戏网络编程相关工作多年. 目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网 ...

  5. DNS分别在什么情况下使用UDP和TCP

    DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类.但很少有人知道DNS分别在什么情况下使用这两种协议.     如果用wiresha ...

  6. JAVA基础学习day24--Socket基础一UDP与TCP的基本使用

    一.网络模型 1.1.OIS参考模型 1.2.TCP/IP参考模型 1.3.网络通讯要素 IP地址:IPV4/IPV6 端口号:0-65535,一般0-1024,都被系统占用,mysql:3306,o ...

  7. 初识-----基于Socket的UDP和TCP编程及测试代码

    一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...

  8. 通信协议之HTTP,UDP,TCP协议

    1.UDP,TCP,HTTP之间的关系 tcp/ip是个协议组,它可以分为4个层次,即网路接口层,网络层,传输层,以及应用层, 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协 ...

  9. Http UDP还是TCP

    http://1024monkeys.wordpress.com/2014/04/01/game-servers-udp-vs-tcp/ 在编写网络游戏的时候,到底使用UDP还是TCP的问题迟早都要面 ...

  10. 游戏服务器:到底使用UDP还是TCP

    http://blog.jobbole.com/64638/ 在编写网络游戏的时候,到底使用UDP还是TCP的问题迟早都要面对. 一般来说你会听到人们这样说:“除非你正在写一个动作类游戏,否则你就用T ...

随机推荐

  1. 快速部署网络爬虫框架scrapy

    1. 安装Anaconda,因为Anaconda基本把所有需要依赖的环境都一键帮我们部署好了,不需要再操心其他事了,进官网选择需要下载的版本:https://www.anaconda.com/down ...

  2. servlet设置cookie

    Cookie cookie =new Cookie("user","黄花菜");//实例化一个Cookie对象 cookie.setMaxAge(7*24*60 ...

  3. 20165323《Java程序设计》第九周学习总结

    一.教材内容学习总结 URL类 1.URL 类是 java.net 包中的一个重要的类,使用 URL 创建对象的应用程序称为客户端程序. 2.一个 URL 对象通常包含最基本的三部分信息:协议.地址和 ...

  4. php归档格式:phar文件详解(创建、使用、解包还原提取)

    转载一篇,突然遇到一个冷知识,phar的东东,貌似和jar.war是一种鬼. 重点使用一下下面这个东东,就能解包出来东东了. $phar = new Phar('lib/yunke.phar', 0) ...

  5. Oracle Client(客户端) 安装与配置

    因为工作需要,需要通过本地oracle客户端将数据导入到远程服务器上的oracle数据库中.从csdn下了很多oracle客户端,都是属于精简版,缺少imp.exe文件,造成无法导入数据.所以最终从o ...

  6. 【转载】Python and Mysql Andy Dustman

    0. http://mysql-python.sourceforge.net/ Python and MySQL: This is a presentation I did a couple year ...

  7. XML与HTML的主要差异

    1. 参考 XML 简介 2. XML 与 HTML 的主要差异 XML 不是 HTML 的替代. XML 和 HTML 为不同的目的而设计: XML 被设计为传输和存储数据,其焦点是数据的内容. H ...

  8. eclipse启动web应用

    在建好web项目的基础上: (1)配置tomcat服务器 点击window---->Preference----->Server---->Runtime Environment--- ...

  9. ELK 环境搭建2-Kibana

    一.安装前准备 1.节点 192.168.30.41 2.操作系统: Centos7.5 3.安装包 a.java8: jdk-8u181-linux-x64.tar.gz b.Kibana kiba ...

  10. 解决 js setTimeout 传递带参数的函数无效果

    最近 js  用到 setTimeout 递归调用 刷新进度  setTimeout ("getProgress(name,type)", 3000) ; 发现getProgres ...