网络编程

1.操作 InetAddress地址

/**

*操作 InetAddress地址

* @author YZB

*/

publicclass IPDome {

publicstaticvoid main(String[] args) {

// TODO Auto-generated method stub

try {

InetAddress i = InetAddress.getLocalHost();

System.out.println(i.toString());

System.out.println("address:"+i.getHostAddress());

System.out.println("name:"+i.getHostName());

InetAddress ia=InetAddress.getByName("193.168.1.110");

System.out.println("name:"+ia.getHostName());

System.out.println("address:"+ia.getHostAddress());


} catch (UnknownHostException e) {

e.printStackTrace();

}

}

}

2.UDP

UDP协议的全称是用户数据包协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议

UDP的特性:

它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

比如我们聊天用的ICQ和QQ就是使用的UDP协议。


例1:

(1)接收端:

/**

* UDP接收端 需求:定义一个程序,用于接收UDP协议传输数据并处理

* 1.定义UDPSocket服务

* 2.定义一个数据包,因为要存储接收到的字节数据--因为数据包对象中有更多功能可以提前字节数据中的不同数据信息

* 3.通过Socket服务的receive方法将收到的字节数据存入已定义好的数据包中

* 4。通过数据包对象的特有功能将这些不同的数据取出,打印在控制台上

* 5.关闭资源

*@author YZB

*/

publicclass UDPRece {

publicstaticvoid main(String[] args) {

DatagramSocket ds = null;

try {

ds = new DatagramSocket(1000);

byte[] buf = newbyte[1024];

DatagramPacket dp = new DatagramPacket(buf, buf.length);

try {

ds.receive(dp);

} catch (IOException e) {

e.printStackTrace();

}

String ip = dp.getAddress().getHostAddress();

String data = new String(dp.getData(), 0, dp.getLength());

int port = dp.getPort();

System.out.println("IP地址为:" + ip + "对你说:" + "::" + port);

} catch (SocketException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

//ds.close();

}

}

(2):发送端1

/**

* UDP发送端 需求:通过UDP传输方式,将一段文字数据发送出去。

* 1.建立UDPSocket服务,通常会监听一个端口,其实就是给这个接收网络应用程序定义数字标示,方便与明确那些数据过来该应用程序可以处理。

* 2.提供数据,并将数据封装到数据包中

* 3.通过socket服务的发送功能,将数据包发出去 4.关闭资源.

* @author YZB

*/

publicclass UDPSend {

publicstaticvoid main(String[] args) {

DatagramSocket ds = null;

try {

ds = new DatagramSocket();

// BufferedReader从字符输入流中读取文本,缓冲各个字符 ,InputStreamReader 是字节流通向字符流的桥梁

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

String line = null;

while ((line = bufr.readLine()) != null) {

if ("886".equals(line)) {

ds.close();

break;

}

byte[] buf = line.getBytes();

DatagramPacket dp = new DatagramPacket(buf, buf.length,

InetAddress.getByName("192.168.1.100"), 1000);

ds.send(dp);

}

} catch (SocketException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}


}

例2:

/**

* 使用UDP编写一个聊天工具

* @author YZB

*

*/

publicclass UDP聊天 {

publicstaticvoid main(String[] args) {

try {

DatagramSocket SendSocket = new DatagramSocket();

DatagramSocket ReceSocket = new DatagramSocket(1000);

new Thread(new Send(SendSocket));

new Thread(new Rece(ReceSocket));

} catch (SocketException e) {

e.printStackTrace();

}

}

}

class Send implements Runnable {

private DatagramSocket ds;


public Send(DatagramSocket ds) {

this.ds = ds;

}


@Override

publicvoid run() {

try {

BufferedReader bufr = new BufferedReader(new InputStreamReader(

System.in));

String line = null;

while ((line = bufr.readLine()) != null) {

if ("886".equals(line)) {

ds.close();

break;

}

byte[] buf = line.getBytes();

DatagramPacket dp = new DatagramPacket(buf, buf.length,

InetAddress.getByName("192.168.1.100"), 1000);

ds.send(dp);

}

} catch (IOException e) {

System.out.println("发送端失败!!");

e.printStackTrace();

}

}


}

class Rece implements Runnable {

private DatagramSocket ds;


public Rece(DatagramSocket ds) {

this.ds = ds;

}


@Override

publicvoid run() {

try {

while (true) {

byte[] buf = newbyte[1024];

DatagramPacket dp = new DatagramPacket(buf, buf.length);

ds.receive(dp);

String ip = dp.getAddress().getHostAddress();

String data = new String(dp.getData(), 0, dp.getLength());

intport = dp.getPort();

System.out.println("IP地址为:" + ip + "对你说::" + data);

}

} catch (IOException e) {

System.out.println("接收失败!!");

e.printStackTrace();

}

}

}


3.TCP

TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议

例1:

/**

* 服务端

* 需求:定义端点接收数据并打印在控制台上

* @author YZB

*/

publicclass TCPSever {

publicstaticvoid main(String[] args) {

try {

// 1.建立服务端socket服务,并监听一个端口。

ServerSocket ss = new ServerSocket(1003);

// 2.通过accept方法获取连接过来的客户端对象

Socket s = ss.accept();

String ip = s.getInetAddress().getHostAddress();

System.out.println(ip + "连进来了!!");

// 3.获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据

InputStream in = s.getInputStream();

byte[] buf = newbyte[1024];

int len = in.read(buf);

System.out.println(new String(buf, 0, len));

Thread.sleep(10000);

OutputStream out = s.getOutputStream();

out.write("客户端我以收到!!".getBytes());

// 4.释放资源

s.close();

} catch (IOException e) {

e.printStackTrace();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

/**

*  客户端

*   需求:创建Socket服务,并指定要连接的主机和端口

* @author YZB

*/

publicclass TCPClient {

publicstaticvoid main(String[] args) {

try {

//1.创建客户端socket服务,指定目的主机和端口

Socket s=new Socket("192.168.1.100",1003);

//2.为了发送数据,应该获取socket流中的输出流

OutputStream out=s.getOutputStream();

//3.写入数据

out.write("TCP 我来啦!!".getBytes());

InputStream in=s.getInputStream();

byte[]buf=newbyte[1024];

int len=in.read(buf);

System.out.println(new String(buf,0,len));

//4.释放资源

s.close();

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

例2:

/**

* 创建客户端,接收对象

* @author YZB

*/

publicclass TCPFuWuDuan {

publicstaticvoid main(String[] args) {

try {

ServerSocket serverscoket=null;//创建服务器端套接字

Socket clientsocket=null;//创建客户端套接字

String str=null;

DataOutputStream out=null;//创建DataOutputStream类对象

DataInputStream in=null;//创建DataInputStream类对象

serverscoket=new ServerSocket(4332);//实例化套接字对象

System.out.println("等待和客户机的连接!");

clientsocket=serverscoket.accept();//接受客户连接呼叫

//实例化DataInputStream对象

in=new DataInputStream(clientsocket.getInputStream());//获取套接字的输入流

out=new DataOutputStream(clientsocket.getOutputStream());//获取套接数的输出流

while(true){

str=in.readUTF();

out.writeUTF(str);//读取客户放入连接中的信息

System.out.println("服务器收到:"+str);

Thread.sleep(1000);//线程休眠

}

} catch (IOException e) {

e.printStackTrace();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

/**

* 创建客户端

* @author YZB

*/

publicclass TCPKeHuDuan {

publicstaticvoid main(String[] args) {

try {

Socket clientSocket;//创建客户端套接字

DataInputStream in = null;

DataOutputStream out = null;

clientSocket = new Socket("localhost", 4332);

in = new DataInputStream(clientSocket.getInputStream());

out = new DataOutputStream(clientSocket.getOutputStream());

out.writeUTF("卧室客户机:");

String str = null;

int i = 0;

while (true) {

str = in.readUTF();// 读取流中的数据

out.writeUTF(i++ + "");// 向流中写入数据

System.out.println("客户端收到:" + str);// 输出信息

Thread.sleep(1000);// 线程休眠

}

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}


你可能感兴趣的:(网络编程)