Java网络通讯之tcp的基本代码框架
之前在学习的过程中,一路学,却很少做总结,接下来的几天里,我将会整理一些自己曾经学过的技术。首先是Java的网络编程,我这也算是抛砖引玉,欢迎各位大神指出不足。
首先简单介绍一下相关的术语,主机(Host),就是一台电脑,特指连接网络的电脑;服务器(Server),指的是提供服务的主机或者程序;客户端(Client),请求服务的主机或者程序;服务(Serverice),顾名思义,就是一种服务,例如,客户端请求下载一个文件,服务器提供返回这个文件的数据,则称为“文件下载服务器”。
IP:服务器的主机地址 x.x.x.x 格式,端口:服务号,界于 1 ~ 65535 之间。简单来说:IP地址用于标识一台主机,而端口用于标识该主机上的一个服务。这些网络通信的基本术语,接下来就是第一个简单通讯例子:
1、首先是服务器端代码
package my; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class MyServer { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub //建立服务器,服务于2019端口 ServerSocket serverSock = new ServerSocket(2019); System.out.println("服务器启动,等待连接..."); while(true) { //监听请求,阻塞等待,直到有客户端发起连接... Socket conn = serverSock.accept(); //从连接里得到输入输出流 //InputStream:可以读取客户端发来的数据 //OutputStream:可以发送数据给客户端 InputStream inputStream = conn.getInputStream(); OutputStream outputStream = conn.getOutputStream(); //接收数据 byte[] inputData = new byte[4000]; int n = inputStream.read(inputData); if(n <= 0) { conn.close(); continue; } //发送数据 String inputMsg = new String(inputData , 0 , n , "UTF-8"); System.out.println("GOT:" + inputMsg); String outputMsg = "Welcome!"; byte[] ouputData = outputMsg.getBytes(); outputStream.write(ouputData); System.out.println("ECHO:" + outputMsg + " "); //关闭连接 conn.close(); } } }
2、客户端的代码
package my; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.Socket; public class MyClient { public static void main(String[] args) throws IOException { //一个Scoket代表一路连接 Socket sock = new Socket(); //连接至服务器 sock.connect(new InetSocketAddress("127.0.0.1" , 2019)); //InputStream用于接收数据,OutputStreet用于发送数据 InputStream inputStream = sock.getInputStream(); OutputStream outputStream = sock.getOutputStream(); //发送数据 String outputMsg = "Hello"; byte[] outputData = outputMsg.getBytes("UTF-8"); outputStream.write(outputData); System.out.println(">>" + outputMsg); //接收数据 byte[] inputData = new byte[4000]; int n = inputStream.read(inputData); String inputMsg = new String(inputData , 0 , n , "UTF-8"); System.out.println("<<" + inputMsg); //关闭连接 sock.close(); } }
以上代码是Java网络编程简单代码框架,接下来的学习中都会根据以上的代码进行学习与改进。