【黑马程序员】java网络编程

来源:互联网 发布:宝丽来效果软件 编辑:程序博客网 时间:2024/05/29 03:24

                                  ------- android培训、java培训、期待与您交流! ------……

IP基础:

InetAddress类主要表示IP 地址,他有两个子类,也就是俗称的ipv4和ipv6.

常用的方法有:
getByName()通过主机名称获得InetAdress对象

getLocalHost() 通过本机得到InetAdress对象

getHostName() 得到IP地址

 

 java中网络编程:

  包括两种 Tcp和UDP 。 tcp 是安全的,而udp是不安全的

一:Tcp

  java中使用socket完成tcp编程,服务端使用ServerSocket类 客户端使用Socket类。

 

serversocket类常用的方法:

1. serversocket (int 端口)创建对象并指定端口

2.accept()等待客户连接

3.getInetAddress() 返回服务器的IP

4.close() 关闭

 

socket类常用的方法:

1.Socket(host,int post) 创建对象并指定主机名称和端口

2.getInputStream()返回套接字的输入流

3.getOutputStream() 返回套接字的输出流

4.close() 关闭

 

建立连接步骤:

1。服务器分配一个端口号,服务器使用accept()方法等待客户端的信号,信号一到打开socket连接,从socket中取得OutputStream和InputStream。

 2。客户端提供主机地址和端口号使用socket端口建立连接,得到OutputStream和InputStream。

  Server端编码的步骤:

 1、new ServerSocket打开端口

 2、调ServerSocket的accept()等待客户连接,当连接成功返回交互的Socket。

 3、调用Socket.getInputStream,getOutputStream获得服务器端的IO流

 4、用处理流封装后与客户端交互,记住你读我写,一读一写。

 5、关闭单一客户端调用Socket的close(),关闭服务器调ServerSocket的close();

 简单代码:

ServerSocket ss = new ServerSocket(6666);
  while(true) {
   Socket s = ss.accept();
   DataInputStream dis = new DataInputStream(s.getInputStream());
   dis.close();
   s.close();

 Socket端编码步骤:

 1、new Socket(Server ip,Serverport)试图连接,如成功才有对象

 2、调用Socket.getInputStream,getOutputStream获得服务器端的IO流

 3、用处理流封装后与客户端交互,记住你读我写,一读一写。

 4、关闭,只有Socket的close()方法。

简单的创建代码:

   Socket s = new Socket("127.0.0.1", 6666);
  OutputStream os = s.getOutputStream();
  DataOutputStream dos = new DataOutputStream(os);
  dos.writeUTF("hello server!");
  dos。flush()。
  dos.close();
  s.close();

 

二。 UDP

 udp 需使用 datapramsocket 类 和datagrampacket 类。

DatagramSocket和DatagramPacket类:

DatagramSocket:此类表示用来发送和接收数据报包的套接字。

DatagramPacket:数据报包,是UDP下进行传输数据的单位,数据存放在字节数组中,其中包括了目标地址和端口以及传送的信息。

DatagramSocket 类常用方法:

1.DatagramSocket(int post) 创建对象指定端口

2.send(DatagramPacket p) 发送DatagramPacket数据包

3. receive(DatagramPacket p) 接收DatagramPacket数据包

 

DatagramPacket 类的常用方法

1.DatagramPacket(byte[] buf ,int length) 实例化对象并指定接收数据长度

2.DatagramPacket(byte【】 buf , int length,InetAddress ip,int post)实例化对象指定发送的数据,数据长度,和地址,端口

3.getDate() 返回接收的数据

4.getLength() 返回接收的或发送的长度

 

UDP的连接步骤:

UDP发送端:

1、创建一个DatagramSocket,不需要参数

2、创建一个DatagramPacket,指明接收方的IP地址和端口号

3、发送数据send(DatagramPacket p)

4、关闭DatagramSocket

关键代码:

long n = 10000L;
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  DataOutputStream dos = new DataOutputStream(baos);
  dos.writeLong(n);

byte[] buf = baos.toByteArray();

DatagramPacket dp = new DatagramPacket(buf, buf.length,
              new InetSocketAddress("127.0.0.1", 5678)
              );
  DatagramSocket ds = new DatagramSocket(9999);
  ds.send(dp);
  ds.close();

 UDP接收端:

 1、创建一个DatagramSocket,指定接收方的IP地址和端口号

 2、创建一个DatagramPacket,不需要IP地址和端口号

 3、接收数据receive(DatagramPacket p)

 4、关闭DatagramSocket

关键代码:

byte buf[] = new byte[1024];
  DatagramPacket dp = new DatagramPacket(buf, buf.length);
  DatagramSocket ds = new DatagramSocket(5678);
  while(true)
  {
   ds.receive(dp);
   ByteArrayInputStream bais = new ByteArrayInputStream(buf);
   DataInputStream dis = new DataInputStream(bais);
   System.out.println(dis.readLong());

原创粉丝点击