网络编程

来源:互联网 发布:淘宝商城女装新款夏装连衣裙 编辑:程序博客网 时间:2024/05/21 20:25


网络编程的基础知识

  • 网络协议与TCP/IP
  • IP地址和Port(端口号)
  •      本地回路的IP地址:127.0.0.1
  •      端口号的范围为0---65535之间,0----1023之间的端口数是用于一些知名的网络服务和应用
  • UDPTCP

TCP,传输控制协议,是面向连接的通信协议

UDP,用户数据报协议,是无连接通信协议

Socket

  • Socket是网络驱动层提供给应用程序编程的接口和一种机制
  • 可以吧Socket比喻成是一个港口码头。应用程序只要把货物放到港口码头上,就算完成了货物的运送。应用程序只需等待货物到达码头后,将货物取走
  • Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IPPort


Java中的网络编程类

  • 位于java.net包中
  • DatagramSocket类用于UDP通信
  • ServerSocket类用于TCp通信的服务器端
  • Socket类用于TCP通信的服务器和客户端

UDP网络程序

  • DatagramSocket
  • DatagramPacket
  • InetAddress
  • 最简单得UDP程序
  • UDP编写网络聊天程序

DatagramSocket

  • 构造函数
  • close方法
  • send(DatagramPacket p)方法
  • receive(DatagramPacket p)方法

DatagramPacket

如果把DatagramSocket比作创建的港口码头,那么DatagramPacket就是发送和接收数据的集装箱。

  • 构造函数
  • getInetAddressgetPort方法
  • getDatagetLength方法

InetAddress

  • InetAddress是计算机IP地址的一个类,而在日常应用中的计算机地址是用“192.168.0.1”、"www.it315.org"等字符串格式来表示的。
  • getByName方法
  • getHostAddress方法

最简单得UDP程序

  • 字符串与字符数组之间的双向转换
  • UDP接收程序必须先启动运行,才能接受UDP发送程序发送的数据
  • start命令来打开新命令行窗口的好处
  • 解决发送中文字符串的问题。

package blackhouse.net;import java.io.IOException;import java.net.*;public class UDPSender{public static void main(String[] args) throws Exception{DatagramSocket ds = new DatagramSocket();// 由系统自己分配String strInfo = "hello www.315.org";ds.send(new DatagramPacket(strInfo.getBytes(), strInfo.length(),InetAddress.getByName("192.168.0.10"), 3000));ds.close();}}package blackhouse.net;import java.io.IOException;import java.net.*;public class UDPRecv{public static void main(String[] args) throws Exception{DatagramSocket ds = new DatagramSocket(3000);byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf, 1024);ds.receive(dp);String strInfo = new String(dp.getData(), 0, dp.getLength());System.out.println(strInfo + " form "+ dp.getAddress().getHostAddress() + ":" + dp.getPort());ds.close(); }}


如果你传送的是中文字符会接受不到,此时只要将

ds.send(new DatagramPacket(strInfo.getBytes(), strInfo.length(),

InetAddress.getByName("192.168.0.10"), 3000));

的发送长度该为strInfo.getBytes().length即可。