网络模型分为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. HTML5 CSS3 Transform 笔记 (scale不起作用)

    Transform的 scale属性不能作用于 inline元素上,例如span 并且动画 animation  也不能作用于inline元素上 可以给span加display:inline-bloc ...

  2. Android 第一波

    1. Devik进程,Linux进程,线程的区别 说一说对 SP 频繁操作有什么后果? SP 能存储多少数据? SP 的底层其实是由xml文件来实现的,操作 SP 的过程其实就是xml的序列化和反序列 ...

  3. 如果拷贝项目出现各种找不到文件的时候,基本就是没有标记,或者文件名的问题,Could not find resource mybatis.xml,解决方法

    Could not find resource mybatis.xml

  4. Mongodb for .Net Core 驱动的应用

    一:我在做.net core 应用mongodb的sdk时,查阅了不少资料,故记录下来,以方便查阅.mongodb类库的版本 mongodb driver 2.4.3,一下方法均来自此版本文件 先看看 ...

  5. 设置git记住用户和密码

     git config --global credential.helper store

  6. [转] 组件库按需加载 借助babel-plugin-import实现

    前段时间一直在基于webpack进行前端资源包的瘦身.在项目中基于路由进行代码分离,http://www.cnblogs.com/legu/p/7251562.html.对于公司内部的组件库,所有内容 ...

  7. html知识杂记

    1.HTML中不支持 空格.回车.制表符,它们都会被解析成一个空白字符.2.HTML 是用来描述网页的一种语言.3.元素的内容是开始标签与结束标签之间的内容.4.即使 <br> 在所有浏览 ...

  8. python全栈开发day60-django_app ORM 完整登录案例

    day60 内容回顾: 1. HTTP协议: 1.请求(浏览器发给服务端的消息——request) 请求方法 URL 协议版本\r\n k1:v1\r\n k2:v2\r\n \r\n 请求体 —— ...

  9. php通过CURL模拟post提交请求

    <?php header("Content-type:text/html;charset=utf-8"); class Test{ public function reque ...

  10. day56 文件 文档处理,事件

    前情回顾: 1. 前情回顾 0. 选择器补充 - 属性选择器 - $("[egon]") - $("[type='text']") - $("inpu ...