【学习日记】java网络编程知识点总结
来源:互联网 发布:pscc是什么软件 编辑:程序博客网 时间:2024/05/16 10:12
- 网络模型:OSI参考模型、 TCP/IP模型
OSI:应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
- TCP/IP:应用层 传输层 网际层 主机至网络层
常用协议
传输层TCP UDP
网际层 IP
应用层 HTTP FTP
- 网络通信要素:IP 地址、端口号、通讯协议
IP地址:网络设备的标识
- 端口号:为了区分计算机里面的应用程序而为每一个应用程序的标识
- 通讯协议:定义通信规则
TCP/UDP区别
- UDP
- 1 将数据源和目的地封装成数据包中
2 不需要建立连接
3 每个数据报的大小限制在64KB
4 因无连接,是不可靠的协议
5 不需要简历连接,速度快 - TCP
- 1 建立连接,形参传输数据的通道
2 在连接中进行大数据量传输
3 通过三次握手完成连接
4 是可靠协议
5 必须建立连接,效率会稍低
- Socket
1 是为网络服务提供的一种机制。
2 通信的两端都有Socket。
3 网络通信其实就是Socket间的通信。
4 数据在两个Socket间通过IO传输。
UDP协议传输
编写一个聊天程序。有收数据的部分,和发数据的部分。这两部分需要同时执行。那就需要用到多线程技术。一个线程控制收,一个线程控制发。因为收和发动作是不一致的,所以要定义两个run方法。而且这两个方法要封装到不同的类中。
代码如下
package testimport java.io.*;import java.net.*;/** * @author wangkun */class Send implements Runnable{ //建立套件字 private DatagramSocket ds; public Send(DatagramSocket ds) { this.ds = ds; } //重写run()方法 public void run() { try { //从键盘获取数据 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); String line = null; while((line=bufr.readLine())!=null) { byte[] buf = line.getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10002); ds.send(dp); if("886".equals(line)) break; } } catch (Exception e) { throw new RuntimeException("发送端失败"); } }}class Rece implements Runnable{ //建立UDPsocket断点 private DatagramSocket ds; public Rece(DatagramSocket ds) { this.ds = ds; } public void run() { try { while(true) { byte[] buf = new byte[1024]; //定义数据包DP DatagramPacket dp = new DatagramPacket(buf,buf.length); //接收 ds.receive(dp); String ip = dp.getAddress().getHostAddress(); String data = new String(dp.getData(),0,dp.getLength()); if("886".equals(data)) { System.out.println(ip+"....离开聊天室"); break; } System.out.println(ip+":"+data); } } catch (Exception e) { throw new RuntimeException("接收端失败"); } }}public class test5{ public static void main(String[] args) throws Exception { DatagramSocket sendSocket = new DatagramSocket(); DatagramSocket receSocket = new DatagramSocket(10002); new Thread(new Send(sendSocket)).start(); new Thread(new Rece(receSocket)).start(); }}
TCP协议传输
1,tcp分客户端和服务端。
2,客户端对应的对象是Socket;服务端对应的对象是ServerSocket。
TCP 传输
客户端
package testimport java.io.*;import java.net.*;class ClientDemo{ public static void main(String[] args) throws Exception { //建立客户端的socket Socket s = new Socket("192.168.1.210",10002); //获取socket流中的输出流发送数据 OutputStream out = s.getOutputStream(); out.write("asdasd".getBytes()); s.close(); }}
服务端
class ServerDemo{ public static void main(String[] args) throws Exception { //建立服务端socket服务,监听一个端口。 ServerSocket ss = new ServerSocket(10002); while(true) { //通过accept接收客户端Socket Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); //sop(ip+":connected"); //使用客户端对象的读取流来获取客户端socket发送过来的数据 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); sop(new String(buf,0,len)); s.close();//关闭客户端. } //关闭服务端socket //ss.close(); }}
TCP的传输的客户端和服务端的互访
需求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息。
- 客户端
- 思路:
- 1,建立socket服务。指定要连接主机和端口。
2,获取socket流中的输出流。将数据写到该流中。通过网络发送给服务端。
3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。
4,关闭客户端资源。
class ClientDemo2 { public static void main(String[] args)throws Exception { //建立socket服务 Socket s = new Socket("192.168.1.210",10002); //获取socket流中的输出流。将数据写到该流中。通过网络发送给服务端。 OutputStream out = s.getOutputStream(); out.write("服务端是否收到".getBytes()); //获取socket流中的输入流,将服务端反馈的数据获取到,并打印。 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); sop(new String(buf,0,len)); s.close(); }}
服务端
class ServerDemo2{ public static void main(String[] args) throws Exception { //建立服务端socket服务 ServerSocket ss = new ServerSocket(10002); ////通过accept方法获取客户端对象 Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); sop(ip+":connected"); //使用客户端对象的读取流来获取客户端socket发送过来的数据 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); sop(new String(buf,0,len)); OutputStream out = s.getOutputStream(); Thread.sleep(10000); out.write("已收到".getBytes()); s.close(); ss.close(); }}
0 0
- 【学习日记】java网络编程知识点总结
- 【学习日记】java多线程的知识点总结
- 【学习日记】java反射的知识点总结
- 黑马程序员 知识点总结-Java网络编程
- Java基础之网络编程知识点总结
- JAVA知识点总结-18 网络编程
- Java基础之网络编程知识点总结
- Java学习日记(十一)网络编程
- 网络编程知识点总结
- 【学习日记】有关java的IO的知识点总结
- Java网络知识点总结
- 后端网络编程知识点总结
- 后端网络编程知识点总结
- 网络编程学习日记 (1)
- Unix网络编程学习日记
- Core Java第十五章知识点总结——网络编程
- DAY21--java中的网络编程TCP/IP常用知识点总结
- 黑马程序员——学习日记18 java网络编程
- 拉格朗日求条件极值
- 湖心亭看雪
- ACM大数相减
- iOS开发:如何给UIViewController瘦身
- MFC六大关键技术
- 【学习日记】java网络编程知识点总结
- 三段话理解重载,覆盖,隐藏
- LeetCode Maximal Square
- HDU 1028
- 关于JSDoc插件
- Java中的一些基本问题
- Android 多媒体应用——SoundPool音频播放
- qtopia2.0桌面环境和qt4应用程序共存の法
- 函数参数的三种传值方式