学习笔记09-网络编程
2015-10-22 10:58
375 查看
网络编程
网络编程:Scoke编程(通信),套接字编程概述:就是用来实现网络互连的不同计算上运行的程序间可以进行数据交换。
简单说:就是用来实现多台计算机之间进行信息交互的。
理解:
网络编程也叫Socket编程,计算机之间的通信其实就是Scoke之间的通信(通信两端都有自己的Socket)。
三大要素:
IP:
就是计算机(设备)在网络的唯一标识。
DOS命令:
查看本机IP地址: ipconfig /all
测试网络连接:ping IP地址
IP地址的组成:
网络号码和本机地址。
***.***.***.*** (范围是0-255)
A类:前三段都是网络号码,最后一段是本机地址。 (局域网)
B类:前两段是网络号码,后两段是本机地址。
(校园网)
C类:第一段是网络号码,后三段是本机地址。
(广域网)
两个特殊的IP:
本地回环地址:127.0.0.1
广播地址:255.255.255.255
端口号:
就是程序在计算机上的唯一标识。
端口号的范围:0-65535。
我们使用端口号的时候,注意,尽量不要使用0-1024之间的,因为已经被系统占用了。
协议:
简单说:就是不同计算机之间进行数据交换的规则。
UDP协议:
特点:面向无连接,数据不安全(有数据限制,每个数据报包大小必须控制在64K以下),速度快。不区分客户端和服务端。
发送端:
1、创建发送端Socket对象(DatagramSocket类)。
2、创建数据报包。(DatagramPacket类)
DatagramPacket(要发送的内容-字节数组形式,数组的长度,IP地址,端口号);
怎么获取自己的IP地址?
InetAddress.getByName(主机名或者IP地址);
3、调用DatagramSocket类的send()方法发送数据包。
4、关闭发送端Socket对象。
接收端:
1、创建接收端Socket对象(DatagramSocket类)。
2、创建数据报包接收发送端传过来的数据。
public DatagramPacket(byte[] buf, int length)
3、调用DatagramSocket类的receive()方法接收传过来的数据。
socket.receive(DatagramPacket类的对象);
4、从数据包中获取数据:
getData(); 从数据包中获取数据(字节数据形式)
getLength(); 获取有效的数据的字节长度。
//InetAddress 可以看做是IP地址的包装类
DatagramPacket类的对象.getAddress().getHostAddress(); //返回的是字符串类型的IP地址
DatagramPacket类的对象.getPort(); //获取端口号(int类型)
5、把接收到的数据转成字符串,并打印(可写可不写)
6、关闭接收端Socket对象。
TCP协议:
特点:面向有连接(三次握手),数据安全,速度低。区分客户端和服务端的。
UDP协议发送和接收数据:
普通版(只实现发送和接收就可以了)。
不断发送和接收。(while改进)
发送端和接收端在一个窗口。(多线程改进版)
小案例:
GUI改进版。(不作为重点掌握,有时间了玩儿玩儿就行)
发送:
ActionListener
记录:
把聊天记录写入到一个文本文件中。(注意:是追加写入)
//实际开发中,这些信息都是存在数据库中的。
清屏:
震动:
原理:在两个(多个坐标)进行快速的切换。
如何实现震动的?
判断传过来的字节数组的首个字节时候是-1,如果是,就震动,并且停止本次发送。
如果不是,就正常发送。
快捷键:
添加一个键盘监听,KeyListener
生成jar包:
TCP协议:
需要建立连接(三次握手),速度慢,数据是安全的。
客户端:
1、创建一个客户端Socket对象(指定IP和端口号),通过IP地址和连接对应的服务器。
2、通过Socket类的getInputStream()方法和getOutputStream()方法获取和服务器端相连的IO流。
客户端输入流可以读取 服务器端输出流写出的内容
客户端输出流可以写出 数据 到服务器端输入流
服务器端:
1、创建服务器端Socket对象(指定端口)。
创建ServerSocket类的对象。
2、监听连接。
调用ServerSocket类中的accept()方法创建和该客户端通信的Socket对象。
3、通过Socket类的getInputStream()方法和getOutputStream()方法获取和客户端端相连的IO流。
服务器端输入流可以读取 客户端端输出流写出的内容
服务器端输出流可以写出 数据 到客户端输入流
用多线程改进服务器端:
用匿名内部类的方式把服务器端的 读写数据的代码给封装起来就可以了。
相关文章推荐
- Xcode7编译时出现http报错解决方法
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path.(jsp页面报错)
- [Nginx]ngx_http_top_header_filter地址为0
- LoadRunner之自定义HTTP请求
- 我是如何搭起Android app网络层的——介绍篇
- Meta http-equiv属性详解(转)
- HTTP cookies 详解(国外一位大牛的文章)
- eclipse CSV连接:ProxyHTTP:java.io.IOException:proxy error
- 基于tcp和udp的socket通信
- 模拟浏览器请求 HttpClient入门
- Http协议中Cookie详细介绍(转)
- iOS网络连接判断
- ntp时间服务器同步完整配置(ntp.sjtu.edu.cn 202.120.2.101 (上海交通大学网络中心NTP服务器地址))
- svn安装(http访问)、备份、增量备份、恢复
- HTTP协议 (七) Cookie(转)
- nonce和timestamp在Http安全协议中的作用
- Android HTTP实例 使用GET方法和POST方法发送请求
- http协议(一)
- wireshark抓取本地回环数据包
- 使用 https 安全协议方法