网络编程(又叫socket编程、套接字编程)
1、网络概述
2、网络编程:就是用语言(java)实现多台计算机的通信
三大要素:
1)IP地址:网络中每一台计算机的唯一标识
2)端口:用于标识进程的逻辑地址
3)协议:定义通信规则
3、IP地址
计算机的唯一标识
给出一个十进制的ip地址值,在网络中实际是用二进制传输
查看本机IP:ipconfig
查看网络是否有问题:ping + IP地址 加-t可以不断打印
ping 127.0.0.1(本机回环地址)
4、端口 逻辑端口
1)每个网络程序都会至少有一个逻辑端口
2)用于标识进程的逻辑地址,不同进程的标识不一样
3)有效端口:0-65535,其中0-1024系统使用或保留端口。
5、协议:定义的规则
5.1、TCP 安全协议
1)建立连接通道
2)数据无限制
3)面向连接(三次握手)
4)因为面向连接,可靠
5)因为面向连接,速度慢
举例:蓝牙,QQ单聊,打电话
5.2、UDP 比较不安全
1)把数据打包
2)数据有限制
3)面向无连接
4)因为无连接,不可靠
5)因为无连接,速度快
举例:QQ聊天室(群聊)
6、Socket:是为网络编程提供的一种机制,包装了有端口和ip地址
6.1、概述
通信两端都有Socket
网络通信其实就是Socket间的通信
数据在两个Socket间通过IO传输
7、IP类的操作对象
InetAddress类,IP地址的包装类
没有构造方法,有静态方法返回该类的对象
public static InetAddress getByName(String host)
成员方法
public String getHostAddress():获取主机ip地址
public String getHostName():获取主机名
public String getLocalHost:获取本地主机
public String getByName(String ip):获取任意主机
8、UDP发送和接收
8.1、UDP协议发送数据步骤
1)创建发送的Socket服务对象
DatagramSocket
//DatagramSocket ds = new DatagramSocket();
2)创建数据,并把数据打包
DatagramPacket dp = new DatagramPacket();
//byte[] bys = line.getBytes();
//DatagramPacket dp = new DatagramPacket(bys, bys.length,InetAddress.getByName("192.168.1.100"), 10086);
3)发送数据
public void send(DatagramPacket);
//ds.send(dp);
4)释放资源
close();
8.2、UDP协议接收数据步骤
1)创建接收端Socket服务对象
DatagramSocket(int port)
//DatagramSocket ds = new DatagramSocket(10086);
2)创建数据包(接收容器)
DatagramPacket(byte[] buf,int length);
//byte[] bys = new byte[1024];
//DatagramPacket dp = new DatagramPacket(bys, bys.length);
3)调用接收方法
public void receive(DatagramPacket)
//ds.receive(dp);
4)解析数据包,把数据显示在控制台
public InetAddress getAddress()
//String ip = dp.getAddress().getHostAddress();
//String s = new String(dp.getData(), 0, dp.getLength());
//String hostName = dp.getAddress().getHostName();
5)释放资源
close()
8.3、注意事项
1)端口一定要一致
2)一个服务端口只能使用一次
只有接收端会占用端口,一启动就占用端口
发送端不占用端口
8.4、广播地址
每个网段的最后一个地址255
如果设定ipp为255,从1-254的计算机只要开着接收端就都能收到
9、
9.1、TCP协议客户端的步骤
发送数据
1)创建客户端的Socket对象
public Socket(InetAddress add, int port)
public Socket(Stirng host, int port)
2)建立连接 只要创建Socket对象,就连接成功
3)获取输出流,写数据即可
Socket: public OutputStream getOutputStream
4)关闭资源
9.2、注意:
TCP程序,必须先开服务器端。(面向连接)
否则会因为找不到端口,而报错:java.net.ConnectException: Connection refused: connect
9.3、TCP协议服务器端的步骤:
1)创建服务器端Socket对象
ServerSocket(int port)
2)监听连接
public Socket accept()
3)获取输入流,读取数据,并显示
public InputStream getInputStream()
4)释放资源
ServerSocket(int port) 构造函数
public Socket accept() 侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。
Socket: public InputStream getInputStream()
9.4、TCP协议接收数据给出反馈
9.5、上传文件出现的问题
写数据进去了,但是反馈没有成功
原因:是因为服务器不知道你已经写完了
解决:告诉服务器已经写完了
1)自定义结束标记。 但是有一个数据跟结束标记一样,就无法再传数据
2)Socket提供了一个方法,通知传输已接收
public void shutdownOutput()
|
|