赞
踩
提示:以下是本篇文章正文内容,下面案例可供参考
TCP网络程序设计是指利用Socket类编写通信程序。
利用TCP协议进行通信的程序有主次之分,一个称为服务器端程序,另一个称为客户端程序
Socket的本质就是将数据抽象成I/O流,在网络间传输数据
套接字:两台机器间通信的端点
服务器端:可以给客户端写出数据,读取客户端发来的数据
客户端:可以读取服务器端发来的数据,给服务器写出数据
用到的工具类:
服务器端:ServerSocket
创建对象:ServerSocket(int port)
该方法创建绑定到特定端口的服务器套接字
参数port为端口号,由自己定义除0~1024以及安装的软件默认占用的端口号之外的端口号
调用方法:Socket(返回值类型) accept()
该方法侦听并接收到此套接字的连接
客户端:Socket
创建对象:Socket(String host,int port)
参数host为IP地址,port为端口号
该方法创建一个流套接字并将其连接到指定主机上的端口号
调用方法:InputStream类中的getInputStream()方法
该方法能够返回此套接字的输入流
OutputStream类中的getOutputStream()方法
该方法能够返回此套接字的输出流
按下win+r键快速启动命令窗口,输入cmd打开管理员界面
输入 ipconfig 命令即可获取到本机的地址信息,IPv4便为本机的IP地址
package dreamfly.net.server; //读取客户端发来的数据,给客户端写出数据 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws IOException { //1.开启服务器,参数是指开着的端口号 ServerSocket server = new ServerSocket(8899); System.out.println("服务器已成功启动"); //2.接收客户端发来的连接 Socket socket = server.accept(); System.out.println("接收到客户端发来的请求"); //3.获取读取流 InputStream in = socket.getInputStream(); //4.读取数据 // int data = in.read(); //默认返回的是整数 for (int i = 0;i < 5;i++){ char data = (char)in.read(); System.out.print(data); } //5.给客户端写出数据 System.out.println(); OutputStream out = socket.getOutputStream(); out.write("world".getBytes()); System.out.println("服务器端成功发送数据"); out.close(); } }
运行时要先在方法处抛出IOException或者用try/catch语句块包围可能会发生异常的语句,在这里我选择了第一种抛出IOException,其次在服务器端类中输出语句是为了检测是否成功发送出数据,如果没有执行到输出语句则说明数据没有发送成功。
package dreamfly.net.client; //读取服务器端发来的数据,给服务器端写出数据 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class Client { public static void main(String[] args) throws IOException { //1.连接到指定的服务器(ip+port) Socket socket = new Socket("127.0.0.1",8899); System.out.println("已连接成功"); //2.获取写出流 OutputStream out = socket.getOutputStream(); //3.写出数据,字节流只能写出整数或字节数组 //将hello对应整数编程对应的字节数组,getBytes()将String转换为byte[] out.write("hello".getBytes()); System.out.println("客户端成功发送数据"); InputStream in = socket.getInputStream(); for (int i = 0;i < 5;i++){ char data = (char)in.read(); System.out.print(data); } System.out.println(); System.out.println("成功接收服务器端数据"); out.close(); } }
服务器端运行结果:
客户端运行结果:
运行顺序为:先开启服务器端再运行客户端
OutStream 字节流只能写出整数或字节数组,要传输字符串类型的数据时要用getBytes()方法将String类型的数据转换为byte[]字节数组
如果在没有开启服务器端的情况下开启客户端,将会有以下的运行结果:
原因:因为服务器端口号没有打开,客户端无法连接到服务器对应端口
以上就是Java实现简单的网络通信的内容,附上本文中用到的类在API中的描述
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。