----------------------android培训、java培训、java学习型技术博客、期待与您交流!----------------------
Java网络编程(即所谓的socket编程),在通信的2个端点之间都有socket,数据就是在这2个socket之间通过IO进行传输的,网络模型主要有:1.OSI参考模型(应用层->表示层->会话层->传输层->网络层->数据链路层->物理层),2.TCP/IP参考模型(应用层->传输层->网际层->主机至网络层)
网络的通讯要素有:1.IP地址 2.端口号 3.传输协议,这里主要说一下传输协议,协议主要分为2大类(UDP和TCP),它们都是互联网的传输协议,而不同之处主要表现在数据的安全性和完整性方面:
UDP协议是面向无连接的协议,同TCP协议相比是一个不安全的数据传输协议。UDP数据包中的验证信息要比TCP协议少的多。所以对数据安全性和完整性的验证就没有TCP协议安全了,相对TCP的大数据量传输,UDP的每个数据包限制在64k内,因为是不可靠的协议,故不需要建立连接,所以速度较快。
TCP协议是面向连接的协议,所以是一个安全的数据传输协议,当在校验的过程中发现数据传输错误的话,会立即进行数据的重传,以保证数据的正确性和完整性,是个安全的数据传输协议,此外TCP可以进行大数据量的传输,因为是可靠协议,故必须建立连接,所以在效率方面相对UDP而言会稍低些。
通过UDP协议进行简单的网络传输:
发送端的代码
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UdpSend {
public static void main(String[] args) throws Exception {
// 1.创建udp服务,通过DatagramScoket对象
DatagramSocket ds = new DatagramSocket();
// 2.确定数据,并封装成数据包,DatagramPacket(byte[] buf, int length, InetAddress
// address, int port)
byte[] buf = "以udp形式发送的数据".getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress
.getByName("127.0.0.1"), 10000);
// 3.通过socket服务,将已有的数据包发送出去,通过send方法
ds.send(dp);
// 4.关闭资源
ds.close();
}
}
接收端代码
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UdpReceive {
public static void main(String[] args) throws Exception {
// 1.创建udp socket,建立端口
DatagramSocket ds = new DatagramSocket(10000);
// 2.定义数据包,用于存储数据
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
// 3.通过服务的recieve方法将收到的数据存入数据包中
ds.receive(dp); //阻塞式方法
// 4.通过数据包的方法获取其中的数据
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(), 0, dp.getLength());
int port = dp.getPort();
System.out.println(ip + "::" + data + "::" + port);
//5.关闭资源
ds.close();
}
}
通过TCP协议进行简单的网络传输:
服务器端代码
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) throws Exception {
//建立服务端socket,并监听一个端口
ServerSocket ss = new ServerSocket(9999);
//通过accept方法获取连接过来的客户端对象
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip + ".....connected");
//获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String(buf, 0, len));
s.close();
ss.close();
}
}
客户端代码
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpClient {
public static void main(String[] args) throws Exception {
//创建客户端socket服务,指定目的主机和端口
Socket s = new Socket("127.0.0.1", 9999);
//为了发送数据,应该获取socket流中的输出流
OutputStream out = s.getOutputStream();
out.write("以tcp形式发送的数据".getBytes());
s.close();
}
}
----------------------android培训、java培训、java学习型技术博客、期待与您交流!----------------------
详情请查看:http://edu.csdn.net/heima
分享到:
相关推荐
day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 ...day11_网络编程 day12_函数式接口 day13_Stream流、方法引用 Java基础小节练习题答案
黑马程序员 - Java基础教学 - 08 - 面向对象(4)-多态.doc
含面向对象,异常处理和常用类,线程技术,集合框架,IO操作,网络编程,文件操作,反射机制,
黑马程序员Java函数式编程全套视频教程,Lambda表达式、Stream流、函数式编程一套全通关1
Java是SUN(Stanford University Network,斯坦福大学网络公司)1995年推出的一门高级语言。是一种面向Internet的编程语言。 随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。是简单易学,完全...
黑马程序员_Java基础辅导班教程课件[第01期]第5天
请不要在下载了,链接已经失效, ...java 全套视频教程之JavaSE初级,后续视频会持续更新,特别适用于零基础的未入门者,从基础讲起,到项目实战,实时和机构培训同步(压缩包如需解压密码为java)
进程:正在进行中的程序。 每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元。 线程:是进程中一个执行单元或执行情景或执行路径负责进程中程序执行的控制单元 。...
Java基础入门,从简到难,视频详细讲解,学编程无压力。
黑马程序员_张孝祥_Java多线程与并发库,老师讲的非常仔细,老师很有耐心.欢迎大家下载学习.
----------------2018版Java面试资料-黑马-Java程序员面试宝典.pdf ----------------J100IT名企面试总结.pdf ----------------100IT名企java面试真题整理面试必考点.pdf ----------------18个万能非技术面试题.docx ...
《Java基础入门》课后习题及答案
Java.EE企业级编程开发实例详解.pdf
精选12种与多线程和并发处理相关的设计模式 264张图表 + 300段Java示例程序 = 轻松学习多线程编程 日本经典多线程入门书,原版长销11年!...对Java编程感兴趣的人 c.对设计模式感兴趣的人 d.对面向对象开发感兴趣的人
《Java编程基础》课后习题答案,包括第三到第八章,很全面哦,我全都调试过的
黑马程序员——Java异步课程源码 plugin Lombok logback.xml 说明 课堂代码主要在 case_java8 子模块内,按章节划分, io.github.hank.java.concurrent.n2 - 同步与异步 io.github.hank.java.concurrent.n3 - Java...
1.有一定JAVA编程基础,希望快速提升技术水平。 2.有一定项目开发经验,希望从事物联网行业应用开发的程序员。 课程内容: 1.MQTT协议 2.EMQ Dashboard 3.EMQ认证 4.日志与追踪 5.发布订阅ACL 6.WebHook 7.管理监控...
随着互联网的高速发展,如今的软件项目在PV、UV、数据量等方面的要求也越来越高,其中针对不同的软件业务 场景,数据库又区分出关系数据库和非关系数据库,关系型数据库大家应该非常的熟悉,比如Mysql。...
java web 课后习题答案