网络编程是指编写运行在计算机的程序,这些设备都通过网络连接起来。要实现网络通信,我们要考虑几个问题:
1.如何建立两个节点(电脑)之间的网络连接?
2.如何向另外一个节点(电脑)发送信息?
3.如何从外部节点(电脑)接收一个请求并给预响应?
4.如何利用网络协议(TCP,UDP)?
解决上面的问题,我们需要先了解一些知识点:
1.每台电脑都有属于它自己的ip地址,用来方便电脑之间通信(ip地址是唯一的)
2.端口号:它决定我们电脑最多能同时启动多少个软件
3.端口:正在运行的程序的标识,它的范围是0-65535,想要知道这台电脑的哪个程序通信,使用ip+端口号.
4.java.net 包中提供了两种常见的网络协议的支持:TCP和UDP协议
一、socket编程
java.net.Socket 类代表一个套接字
Socket原理是通信的两端都有Socket,网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输(问题二)
实现:
套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。
当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信。
二、TCP协议通信
TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议.
使用TCP协议实现通信,需要使用流式套接字。即客户端采用socket,而服务器端采用ServerSocket来完成通信的方式.(问题一和四)
1.服务端编程,步骤如下
public static void main(String[] args) throws IOException { //1. 创建一个ServerSocket ServerSocket serverSocket = new ServerSocket(7777); //2.调用accept(),等到客户端的连接 Socket accept = serverSocket.accept(); System.out.println("有客户端连接"); //3.得到客户端的Socket对象, 调用getInputStream() getOutputStream() 得到输入输出流 InputStream in = accept.getInputStream();//网络流 OutputStream out = accept.getOutputStream(); BufferedReader br = null; BufferedWriter bw = null; //4.输入流接收数据, 输出流发送数据 //把字节流变字符流 br = new BufferedReader(new InputStreamReader(in)); bw = new BufferedWriter(new OutputStreamWriter(out)); String str = br.readLine();//得到数据 bw.write("你好");//写数据 bw.newLine();//换行 bw.flush();//缓冲流需要刷新 //5.关闭流 bw.close(); br.close(); serverSocket.close(); }
2.客户端编写步骤:
public static void main(String[] args) throws IOException { //1.创建一个Socket, 请求服务器地址, 端口, 与服务器进行连接 //问题三 Socket socket = new Socket("127.0.0.1",7777); //2.调用getInputStream() getOutputStream() 得到输入输出流 InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); //3.输出流发送数据,输入流接收数据 BufferedReader br = null; BufferedWriter bw = null; //将字节流转成字符流 br = new BufferedReader(new InputStreamReader(in)); bw = new BufferedWriter(new OutputStreamWriter(out)); Scanner input = new Scanner(System.in); bw.write(input.next());//输入数据 bw.newLine(); bw.flush(); br.readLine();//接收数据 //4.关闭资源 br.close(); bw.close(); socket.close(); }
三、总结
1.TCP 是一个双向的通信协议,因此数据可以通过两个数据流在同一时间发送.
2.TCP是基于(面向)连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接,TCP协议建立连接需要三次握手.
3.UDP是一个无连接的协议,所以应用程序通常必须容许一些丢失、错误或重复的数据包.
4.Java为客户端提供了Socket类,为服务器端提供了ServerSocket类
5.网络编程三要素:IP地址,端口,协议
标签:java,Socket,编程,网络,TCP,bw,br,new,客户端 From: https://www.cnblogs.com/pilpill/p/16621335.html