TCP网络通信编程笔记
- 编写一个服务端,和一个客户端
- 服务端在9999端口监听
- 客户端连接服务端,发送"hello,server",并接收服务端发回的’hello,client’,再退出
- 服务端接收到客户端发送的信息,输出,并发送"hello,client"再 退出
示意图:
客户端编程思路:
- 连接服务端(ip,端口),连接成功返回Socket对象
- 连接上后,通过socket.getOUtputStream()得到与socket对象关联的输出流对象
- 通过输出流,写入数据到数据通道,再写入结束的标志
- 通过socket对象.getInputStream() 读取客户端 写入数据通道显示
- 关闭流对象和socket,必须关闭
服务端编程思路:
-
在本机的9999端口监听,等待连接 细节 :要求本机的9999端口没有其它服务在监听
-
有客户端连接,则会返回Socket对象,程序继续进行
-
通过socket对象.getInputStream() 读取客户端 写入数据通道显示
-
Io读取
-
socket.getOutputStream()得到与socket对象关联的输出流对象
-
通过输出流,写入数据到数据通道,再写入结束的标志socket。shutdownOutput()
-
关闭流和socket
客户端代码实现
//编写客户端 public class Client{ public static void main(String[] args)throws IOException{ //给服务端发送数据 // 1.连接服务端(IP,端口),连接成功返回一个Socket对象 Socket socket=new Socket(InetAddress.getLocalhost(),9999); //2.连接上后,通过socket.getOutputStream()得到与socket对象关联的输流对象 OutputStream outputStream=socket.getOutputStream(); //3.通过输出流,写入数据到数据通道,再写入结束的标记 outputStream.write("hello Serve".getBytes()); // 输出数据结束的标志 outputStream.shutdownOutput(); //接收服务端回复的数据 //4.获取和socket关联的的输入流,读取数据(字节),并显示 InputStream inpuStream=socket.getInPutStream(); byte[] bytes=new byte[1024]; int readLen=0; //io读取(使用字节的方式) while((readLen=inputStream.read(bytes))!=-1){ System.out.println(new String(bytes,0,reaLen));//根据读取到实际长度显示内容 } //关闭流和socket对象 inputStream.close(); outputStream.close(); socket.close(); } }
服务端代码实现
// 编写服务端 public class Service{ public static void main(String [] args) throws IOException{ //接收客户端数据 // 1.在本机的9999端口监听,等待连接 // 细节:这个ServerSocket可以通过accept()返回多个Socket[多个客户端连接服务器的并发] SerVerSocket serverSocket=new ServerSocket(9999); // 2.有客户端连接,则会返回Socket对象,程序继续进行,否则继续等待 Socket socket=serverSocket.accept(); // 3.通过socket对象.getInputStream() 读取客户端 写入数据通道显示 InputStream inputStream=socket.getInputStream(); //io读取 btye[] bytes=new byte[1024]; int reaLen=0; while((reaLen=inputStrem.read(bytes))!=-1){ System.out.println(new String(bytes,0,readLen)); } // 回复客户端数据 //1. 获取socket相关的输出流 socket.getOUtputStream()得到与socket对象关联的输出流对象 OutputStream outputStream=socket.getOutputStream(); outputStream.wrtie("hello,Cilent".getBytes()); outputStream.shutdownOutput(); //关闭流和socket outputStream.close(); inputStream.close(); socket,close(); } }