Java Sock 网络 InetAddress

//获取本机的InetAddress实例

InetAddress address = InetAddress.getLocalHost();

System.out.println("计算机名:"+ address.getHostName());

System.out.println("IP地址:"+address.getHostAddress());

//获取字节数组形式的IP地址

byte[] bytes = address.getAddress();

System.out.println("字节数组形式的IP"+Arrays.toString(bytes));

System.out.println(address);

//根据主机名获取InetAddress实例

InetAddress address2 = InetAddress.getByName("localhost");

System.out.println("计算机名:"+ address2.getHostName());

System.out.println("IP地址:"+address2.getHostAddress());



//创建URL实例—————

URL urlString = new URL("http://www.baidu.com");

URL url = new URL(urlString, "/index.html?username = tom#test");

System.out.println("协议:"+url.getProtocol());

System.out.println("主机:"+url.getHost());

//未指定端口号 使用默认端口号 此时Por方法返回值是-1

System.out.println("端口:"+url.getPort());

System.out.println("文件路径:"+url.getPath());

System.out.println("文件名:"+url.getFile());

System.out.println("相对路径:"+url.getRef());

System.out.println("查询字符转:"+url.getQuery());

// 端口:-1

// 文件路径:/index.html

// 文件名:/index.html?username = tom

// 相对路径:test

// 查询字符转:username = tom

// 通过URL对象的openSteam()方法可以得到执行的资源输入流 

// 通过输入流可以读取、访问网络上的数据

// 使用读取网页内容

URL urlS = new URL("http://www.baidu.com");

try {

// 通过URLopenSream方法获取URL对象所表示的资源字节输入

InputStream isurlS.openStream();

// 将字节输入流转换为字节输入流

InputStreamReader isr = new InputStreamReader(is);

// 为字符输入流添加到缓冲

BufferedReader br = new BufferedReader(isr);

String data = br.readLine(); //读取数据

while (data!= null) {

System.out.println(data);

data = br.readLine();

}

br.close();

isr.close();

is.close();


Socket TCP编程

// Socket实现步骤

// 创建ServerSocketSocket  打开连接到Socket的输入输出流

// 服务器端

// 1、创建ServerSocket对象,绑定监听端口 2、通过accept()方法监听客户端请求

// 3、连接建立后,通过输入流读取客户端发送的请求信息 4、通过输出流向客户点发送相应信息

// 5、关闭相关资源

// 客户端

// 1、创建Socket对象,指明需要连接的服务器的地址和端口号

// 2、连接建立后,通过输出流流向服务器端发送请求信息

// 3、通过输入流获取服务器相应的信息 4、关闭相关资源


//服务器线程处理类————

public class ServerThread extends Thread {


// 和本线程相关的socket

Socket socket = null;

public ServerThread(Socket socket){

this.socket = socket;

}

// 线程执行的操作, 响应客户端的请求

public void run() {

//

// 获取输入流 并读取客户端信息

InputStream is = null;

InputStreamReader isr= null;

// 为输入流添加缓冲

BufferedReader br = null;

// 获取输出流响应客户端的请求

OutputStream os = null;

PrintWriter pw = null;

try {

is = socket.getInputStream();

isr = new InputStreamReader(is);

br = new BufferedReader(isr);

String info = null;

while ((info = br.readLine()) != null) {// 循环读取客户端的信息

System.out.println("我是服务器, 客户端说:"+ info);

}

socket.shutdownInput();// 关闭输入流

os = socket.getOutputStream();

pw = new PrintWriter(os);

pw.write("hello lanuch");

pw.flush();  //将缓冲输出

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

try {

if(pw!=null)

// 关闭相关的资源

pw.close();

if(os!= null)

os.close();

if(br!= null)

br.close();

if(isr!= null)

isr.close();

if(is!= null)

is.close();

if(socket!= null)

socket.close();


//基于TCP协议的Socket通信实现登录=============

// 服务器端

// 创建服务器端Socket ServerSocket 指定绑定的端口号,并监听此端口

ServerSocket serverSocket = new ServerSocket(8888);

Socket socket = null;

// 记录客户端的数量

int count = 0;

System.out.println("**服务器即将启动,等待客户端的连接***");

while(true){

// 调用accept()方法开始监听 等待客户端连接

socket = serverSocket.accept();

// 创建一个新线程

ServerThread serverThread = new ServerThread(socket);

// 启动线程

serverThread.start();

count++;

System.out.println("客户端的数量"+count);

}

获取输入流 并读取客户端信息

// InputStream is =  socket.getInputStream(); //字节输入流

// InputStreamReader isr = new InputStreamReader(is); //将字节流转换为字符流

为输入流添加缓冲

// BufferedReader br = new BufferedReader(isr);

// String info = null;

// while ((info = br.readLine()) != null) {// 循环读取客户端的信息

//

// System.out.println("我是服务器, 客户端说:"+ info);

// }

// socket.shutdownInput();// 关闭输入流

//

获取输出流响应客户端的请求

// OutputStream os = socket.getOutputStream();

// PrintWriter pw = new PrintWriter(os); //包装打印流

// pw.write("hello lanuch");

// pw.flush();  //将缓冲输出

//

关闭相关的资源

// pw.close();

// os.close();

//

// br.close();

// isr.close();

// is.close();

// socket.close();

// serverSocket.close();


客户端——————————————————

1.创建客户端Socket 指定服务器地址和端口

Socket socket = new Socket("127.0.0.1", 8888);

// 2.获取输出流,向服务器端发送信息

OutputStream ossocket.getOutputStream(); //字节输出流

PrintWriter pw = new PrintWriter(os); //将输出流包装为打印流输出

pw.write("用户名:admin2 ;密码:1233");

pw.flush();

socket.shutdownOutput(); //关闭输出流

// 获取输入流读取服务器端的响应信息

InputStream is = socket.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(is));

String info = null;

while((info = br.readLine() )!= null){

System.out.println("我是客户端 服务器说:"+info);

}

// 关闭资源

br.close();

is.close();

pw.close();

os.close();

socket.close();



基于UDP的Socket编程

客户端

/ 1、定义发送信息 2、创建DatagramPacket包含将要发送的信息

// 3、创建DatagramSocket 4、发送数据

public static void main(String[] args) throws IOException {

// 向服务器端发送数据

// 1.定义服务器的地址、端口号、数据

InetAddress address = InetAddress.getByName("localhost");

int port = 8800;

byte[] data = "用户名: admin 密码:123".getBytes();

// 创建数据报,包含发送的数据信息

DatagramPacket packet = new DatagramPacket(data, data.length, address, port);

// 创建DatagramSocket对象

DatagramSocket socket = new DatagramSocket();

// 向服务器端发送数据报

socket.send(packet);

// 接收服务器端响应的数据

// 1、创建数据报 用于接收服务器端响应的数据

byte[] data2 = new byte[1024];

DatagramPacket packet2 = new DatagramPacket(data2, data2.length);

// 2/接收服务器响应的数据

socket.receive(packet2);

// 3、读取数据

String reply = new String(data2, 0, packet2.getLength());

System.out.println("我是客户端,服务器端说:"+reply);

// 关闭资源

socket.close();

}


服务器端————

/1、服务器端实现步骤 创建DatagramSocket指定端口号 2、创建DatagramPacket

// 3、接受客户端发送的数据信息 4、读取数据

public static void main(String[] args) throws IOException {

try {

// 接收客户端发送的数据

// 创建服务器端DatagramSocket 指定端口

DatagramSocket socket = new DatagramSocket(8800);

// 创建数据报 用于接受客户端发送的数据

byte[] data = new byte[1024];

DatagramPacket packet = new DatagramPacket(data, data.length);

// 接收客户端发送的数据

System.out.println("我是服务器启动 等待客户端。。。");

socket.receive(packet); //此方法在接收到数据报之前会一直阻塞

// 读取数据

String info = new String(data, 0, packet.getLength());

System.out.println("我是服务器,客户端说"+info);

// 向客户端相应数据

// 定义客户端的地址、端口号、数据

InetAddress addresspacket.getAddress();

int port = packet.getPort();

byte[] data2 ="欢迎 ".getBytes();

// 创建数据报 包含相应的数据信息

DatagramPacket packet2  = new DatagramPacket(data2, data2.length, address, port);

// 响应客户端

socket.send(packet2);


// 关闭资源

socket.close();

} catch (SocketException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值