java网络编程


--------------------------简单的交互----------------------------------



InetAddress


public class InetAddress {
	public static void main(String[] args) {
		
		try {
			java.net.InetAddress id = java.net.InetAddress.getByName("WWW.baidu.com");
			// 获取对应的ip地址
			System.out.println(id.getHostAddress());// 百度的ip:180.101.49.11
			// 本机的IP
			System.out.println(id.getLocalHost().getHostAddress());
			// 本机的主机名
			System.out.println(id.getLocalHost().getHostName());
			
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

socket


/**
 * Tcp连接的服务器
 * @author 86180
 *
 */
public class Server {
	static int c = 0;
	public static void main(String[] args) {
		
		try {
			
			if(c==0){
				//获取token
				//保存信息,保存当时时间
				System.out.println(c+"if");
				c++;
			}else {
				// 获取当时时间
				
				System.out.println(c+"else");
			}
			// 创建一个服务器端对象 ,监听10010客户端 端口
			ServerSocket server = new ServerSocket(10010);
			System.out.println("服务器已经启动");
			// 监听10010端口是否有数据传输
			Socket socket = server.accept(); // 让服务器阻塞的状态 等待数据传输,有数据就唤醒
			
			// 获取输入流 和 输出流对象
			// 接收客户端的信息
			InputStream in = socket.getInputStream();
			byte[] b = new byte[1024];
			int len = in.read(b);
			// b数组,从0开始  ,长度
			String s = new String(b,0,len);
			System.out.println("客户端发送的信息:"+ s);
			
			// 发送信息到客户端
			OutputStream out = socket.getOutputStream();
			out.write("hello,我是服务器".getBytes());
			
			// 释放
			socket.close();
//			server.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

/*
 * TCP客户端
 * 
 */
public class Client {
	public static void main(String[] args) {
		
		// host 指定连服务器的主机名
		// port 指定连接的端口号
		
		try {
			
			// 获取本机的IP对象
			InetAddress iad = InetAddress.getLocalHost();
			// 创建一个套接字对象
			Socket socket = new Socket(iad.getHostAddress(), 10010);
			
			// 向服务端发送消息
			// 1、获取套接字对应输出流对象
			OutputStream out = socket.getOutputStream();
			// 2、发送到服务器端的信息
			String message = "Hello,I am ls";
			out.write(message.getBytes());
			
			// 接收服务端的信息
			InputStream in = socket.getInputStream();
			// 定义存储容器的缓冲区
			byte[] b = new byte[1024];
			// 读入到缓冲区的具体大小
			int len = in.read(b);
			// b数组,从0开始  ,长度
			String a = new String (b,0,len);
			System.out.println("接收服务端数据未:" + a);
			
			// 释放套接字对象
			socket.close();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}


datagram


public class client {

	public static void main(String[] args) {
		
		// 指定服务器的IP地址 或者主机名称
//		String romoteHost = "192.168.0.37";
		String romoteHost = "LAPTOP-5LRJIHE3";
		
		try {
			/向服务端发送数据///
			
			// 定义地址,端口号,数据
			InetAddress address = InetAddress.getByName(romoteHost);
			int port = 10011;
			// 定义发送到服务端的内容
			byte[] data = "账号:admin,密码:123".getBytes();
			// 创建数据报
			DatagramPacket datagramPacket = new DatagramPacket(data, data.length,address,port);
			// 创建数据报的套接字对象
			DatagramSocket socket = new DatagramSocket();
			socket.send(datagramPacket);
		
		接收服务器端的数据///
			byte[] buf = new byte[1024];
			DatagramPacket packet = new DatagramPacket(buf, buf.length);
			// 接收服务器响应的数据
			socket.receive(packet);
			String content = new String(packet.getData(),0,packet.getLength());
			System.out.println("接收到服务器端的数据:"+content);
			
			socket.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

/**
 * 定义数据报套接字的服务器端
 * @author 86180
 *
 */
public class Server {
	public static void main(String[] args) {
		try {
			接收客户端的而数据///
			// 1、创建一个数据报套接字的对象
			DatagramSocket socket = new DatagramSocket(10011);
			System.out.println("服务器已经启动!");
			// 定义接收数据报的缓冲区对象
			byte[] buf = new byte[1024];
			// 2、创建一个数据报对象,用于接收客户端发送的数据
			DatagramPacket packet = new DatagramPacket(buf, buf.length);
			// 3、接收客户端的数据
			socket.receive(packet);
			// 4、读取客户端的数据
			String content = new String(packet.getData(),0,packet.getLength());
			System.out.println("获取客户端的数据未:"+content);
			
			// 向客户端发送数据/
			System.out.println(packet.getAddress());
			System.out.println(packet.getPort());
			
			
			// 定义客户端的ip地址,端口号,响应信息(数据)
			InetAddress address = packet.getAddress();
			int port = packet.getPort();
			// 定义发送的内容
			byte[] data = "欢迎你".getBytes();
			// 创建发送到客户端的数据报对象
			DatagramPacket datagramPacket = new DatagramPacket(data, data.length, address, port);
			// 发送数据报到客户端
			socket.send(datagramPacket);
			
			socket.close();
			
			 
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

------------多次交互---------------------------------------------

package demo3;
 
 
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
 
 
/**
 * @Description: 客户端类,一个客户端和一个服务器的多次通信
 * @author forward
 * @date 2017年5月5日 下午11:17:14
 * @version V2.0
 */
public class Client {
	public static void main(String[] args) {
		OutputStream os = null;
		InputStream is = null;
		Socket s = null;
		Scanner input = new Scanner(System.in);
		String str = null;
		int count = 0; 
		try {
			System.out.println("客户端");
			// 1、创建Socket套接字 //流套接字
			s = new Socket("127.0.0.1", 1766);
 
 
			while(!"q".equals(str)){
				// 2、一个客户端和一个服务器的多次交互
				System.out.println("一个客户端和一个服务器的第"+(++count)+"次交互");
				System.out.println("客户端发送:(q结束交互)");
				str = input.next();
				// 2-1写数据到服务端
				os = s.getOutputStream();
				byte[] osBuf = str.getBytes();
				os.write(osBuf);
				
				// 2-2从服务端读数据
				is = s.getInputStream();
				byte[] isBuf = new byte[512];
				int index = is.read(isBuf);
				System.out.println("客户端接收:" + new String(isBuf, 0, index));
			}
 
 
			// 3、关闭连接
			System.out.println("客户端断开连接!");
			os.close();
			is.close();
			s.close();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
 
 
	}
}
package demo3;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
 
/**
 * @Description: 服务端,一个客户端和一个服务器的多次通信
 * @author forward
 * @date 2017年5月5日 上午11:40:47
 * @version V2.0
 */
 
public class Server {
	public static void main(String[] args) {
		ServerSocket listener = null;
		Socket s = null;
		InputStream is = null;
		OutputStream os = null;
		String str = null;
		int count = 0; 
		
		try {
			// 1、创建服务器套接字 创建一个ServerSocket类,同时在运行该语句的计算机的指定端口处建立一个监听服务
			listener = new ServerSocket(1766);
 
			// 2、创建新套接字 并返回一个用于与该Client通信的Socket对象Link-SocketServer程序
			// ServerSocket 进行accept之后,就将主动权转让了。该Socket对象绑定了客户程序的IP地址或端口号。
			System.out.println("服务端等待连接中。。。");
			s = listener.accept();
			
			while(!"q".equals(str)){
			// 3、Server程序只要向这个Socket对象读写数据,就可以实现向远端的Client读写数据
			// 3、一个客户端和一个服务器的多次交互
			System.out.println("一个客户端和一个服务器的第"+(++count)+"次交互");
			
			// 3-1从客户端读数据
			is = s.getInputStream();
			byte[] isBuf = new byte[512];
			int index = is.read(isBuf);
			str = new String(isBuf, 0, index);
			System.out.println("服务器接收:" +str);
 
			// 3-2写数据到客户端
			os = s.getOutputStream();
			byte[] osBuf = "我已收到".getBytes();
			System.out.println("服务器发送:"+new String(osBuf,0,osBuf.length));
			os.write(osBuf);
			}
			// 4、断开连接
			System.out.println("服务器端断开连接!");
			is.close();
			os.close();
			s.close();
			listener.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值