Java Socket应用
来源:互联网 发布:vb中truefalse什么意思 编辑:程序博客网 时间:2024/06/06 06:51
Java中的网络支持:
- 针对网络通信的不同层次,Java提供的网络功能主要分为四大类:
- InetAddress:用于标识网络上的硬件资源。
- URL:统一资源定位符
- Sockets:使用TCP协议实现网络通信的Socket相关的类
- Datagrame:使用UDP协议,将数据保存在数据报中,通过网络进行通信。
基于TCP的Socket通信实现步骤
- 服务器端:
- 创建ServerSocket,指定绑定的端口
- 调用accept方法开始监听,等待客户端的连接,返回Sockect对象
- 调用Socket对象的getInputStream方法,获取输入流,得到客户端发送的信息
- 处理信息
- 关闭输入输出流,socket,serversocket
- 客户端:
- 创建客户端Socket,指定服务器地址和端口
- 调用Socket对象的getOutputStream方法,获得输出流
- 将输出流包装成字符流,并调用write方法,将信息写入流
- 调用flush方法完成传输
- 关闭socket输出流
- 关闭各种资源
服务器端:
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;/** * 基于tcp协议通信,服务器端 * @author sunqi * */public class Tcp_Server { public static void main(String[] args) { try { //建立服务器socket ServerSocket serverSocket=new ServerSocket(8888);//指定端口号为8888的服务器socket System.out.println("服务器Socket已建立,等待客户端连接"); Socket socket=null; int count=0; //调用accept监听 while (true) { socket=serverSocket.accept();//等待客户端链接 Tcp_ServerThread serverThread=new Tcp_ServerThread(socket); serverThread.start(); count++; System.out.println("当前连接数量"+count); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.ObjectInputStream;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;/** * 服务器端线程 * @author sunqi * */public class Tcp_ServerThread extends Thread { Socket socket=null; public Tcp_ServerThread(Socket socket) { super(); this.socket = socket; } public void run() { super.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("欢迎您!"); pw.flush(); socket.shutdownOutput(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //关闭资源 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(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
客户端:
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;/** * 基于tcp协议,客户端 * @author sunqi * */public class Tcp_Client { public static void main(String[] args) { try { //1.建立客户端socket,并连接指定端口 Socket socket=new Socket("localhost", 8888); System.out.println("客户端socket建立"); //2.获取输出流,向服务器发送数据 OutputStream os=socket.getOutputStream(); PrintWriter pw=new PrintWriter(os);//输出流包装成打印流 pw.write("用户名:admin,密码:123"); pw.flush();//刷新完成打印流传输 socket.shutdownOutput();//关闭输出流 //3.获取输入流,接收服务器数据 InputStream is=socket.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); String info=null; while ((info=br.readLine())!=null) { System.out.println("服务器:"+info); } socket.shutdownInput(); //4.关闭资源 br.close(); is.close(); pw.close(); os.close(); socket.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
基于UDP的Socket通信实现步骤
- 服务器端:
- 创建DatagramSocket,指定端口号
- 创建DatagramPacket数据报用byte数组作为缓冲
- 调用DatagramSocket的receive方法等待接收客户端发送的数据信息
- 读取数据(对byte数组内容包装/处理)
- 客户端:
- 调用InetAddress类的方法定义服务器的地址、端口号,初始化要发送的数据(存储在byte数组中)
- 创建DatagramPacket对象,并将byte数组包装到DatagramPacket中
- 创建DatagramSocket对象
- 调用DatagramSocket对象的send方法,参数:DatagramPacket对象,将信息发送
服务器端:
package Udp;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;/** * 基于UDP协议,服务器端 * @author sunqi * */public class Udp_Server { public static void main(String[] args) throws IOException { /** * 获取客户端数据 */ //1.建立socket DatagramSocket dsocket=new DatagramSocket(8800); System.out.println("服务器socket已建立"); while (true) { byte[] data=new byte[1024];//存放客户端发送的信息 //2.建立数据报,接收客户端数据 DatagramPacket dPacket=new DatagramPacket(data, data.length); dsocket.receive(dPacket);//等待连接,服务器处于阻塞态 new Udp_ServerThread(dsocket,dPacket,data).start(); } }}
package Udp;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;public class Udp_ServerThread extends Thread { DatagramSocket dsocket=null; DatagramPacket dPacket=null; byte[] data=null; public Udp_ServerThread(DatagramSocket dsocket,DatagramPacket dPacket, byte[] data) { super(); this.dsocket = dsocket; this.dPacket=dPacket; this.data=data; } public void run() { try { super.run(); String info=new String(data, 0, dPacket.getLength()); System.out.println("客户端说:"+info); /** * 响应客户端 */ //1.获得客户端地址和端口号,初始化响应信息 InetAddress address=dPacket.getAddress(); int port=dPacket.getPort(); byte[] data2="欢迎您!".getBytes(); //2.创建数据报 DatagramPacket packet=new DatagramPacket(data2, data2.length, address, port); //3.发送数据 dsocket.send(packet); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
客户端:
package Udp;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;/** * 基于UDP协议通信,客户端 * @author sunqi * */public class Udp_Client { public static void main(String[] args) throws IOException { /** * 向服务器发送数据 */ //1.指定服务器地址,端口号,要发送的数据 InetAddress address=InetAddress.getByName("localhost");//通过服务器名称获取地址 int port =8800; byte[] data="用户名:tom;密码:456".getBytes(); //2.创建数据报 DatagramPacket dpacket=new DatagramPacket(data, data.length,address,port); //3.创建socket DatagramSocket dSocket=new DatagramSocket(); //4.发送数据 dSocket.send(dpacket); /** * 获取服务器响应 */ //1.创建字节数组,存储响应数据 byte[] data2=new byte[1024]; DatagramPacket packet=new DatagramPacket(data2, data2.length); //2.接收响应 dSocket.receive(packet); //3.获取数据 String info=new String(data2, 0, packet.getLength()); System.out.println("服务器说:"+info); dSocket.close(); }}
0 0
- Java Socket 应用例子
- java中Socket应用
- java中Socket应用
- Java Socket应用编程
- java中Socket应用
- java中Socket应用
- Java Socket应用
- Java Socket应用
- Java Socket应用
- Java Socket应用(一)
- Java Socket应用
- Java Socket应用
- Java Socket应用
- Java Socket应用(一)--Socket通信
- JAVA应用socket传输文件
- java中的socket应用详解
- Java Socket应用 通信技术
- Java成长记 Socket应用
- 7.1.2
- imooc-1
- jvm工作机制
- EditText界面显示效果疑问?
- FZU1075 之 分解素因子
- Java Socket应用
- 微信开发就是这么简单
- 通用 Intent
- 火狐浏览器使用RESTClient发送post请求方法
- 读者推荐的学习资料是大学的经典课程
- Ubuntu 16.04安装Matlab 2016b教程
- IO对文件的读写
- 90%的人不知道的微信隐藏功能
- 哪位大哥能得到这个快递单号查询apk的源码吗?