Java Socket编程(二) TCP编程
服务 上一章节提到了TCP协议的相关内容。下面使用TCP在服务端及客户端之间进行传递消息。
TCP协议是面向连接的、可靠的、有序的、以字节流的方式发送数据,通过 三次握手 的方式建立连接,形成传输数据的通道,在连接中进行大量数据的传输,效率会稍低。
Java中基于TCP协议实现网络通信的类有
Socket类(客户端使用):当客户端程序需要从服务端端获取信息及其他服务时,应创建一个Socket对象
ServerSocket(服务端使用):一般用于服务端设置端口号和进行监听
真正进行通信的其实是客户端的Socket和服务端的Socket.

Socket通信的步骤
                 ① 创建ServerSocket和Socket
                 ② 打开连接到Socket的输入/输出流
                 ③ 按照协议对Socket进行读/写操作
                 ④ 关闭输入输出流、关闭Socket
      服务器端:
                 ① 创建ServerSocket对象,绑定监听端口
                 ② 通过accept()方法监听客户端请求
                 ③ 连接建立后,通过输入流读取客户端发送的请求信息
                 ④ 通过输出流向客户端发送相应信息
                 ⑤ 关闭相关资源
package test; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class SocketServer { public static void main(String[] args) throws Exception { int port = 55521;//指定端口 ServerSocket server = new ServerSocket(port);//ServerSocket用于服务器端socket,指定绑定的端口,并监听此端口 System.out.println("等待连接"); Socket socket = server.accept();//调用accept()方法开始监听,等待客户端的连接 InputStream inputStream = socket.getInputStream();//建立好连接,从socket中获取输入流 InputStreamReader isr = new InputStreamReader(inputStream,"UTF-8"); BufferedReader br = new BufferedReader(isr);//建立缓冲,提高效率 String info = null; while((info = br.readLine()) != null) { System.out.println("Server on:" + info); } socket.shutdownInput(); OutputStream os = socket.getOutputStream(); PrintWriter pw = new PrintWriter(os);//PrintWriter 是字符类型的打印输出流 pw.write("欢迎您!你好"); pw.flush(); pw.close(); os.close(); isr.close(); inputStream.close(); server.close(); socket.close(); } }
客户端
                 ① 创建Socket对象,指明需要连接的服务器的地址和端口号
                 ② 连接建立后,通过输出流想服务器端发送请求信息
                 ③ 通过输入流获取服务器响应的信息
                 ④ 关闭响应资源 
package test; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; public class SocketClient { public static void main(String[] args) throws Exception { String host = "127.0.0.1"; int port = 55521; Socket socket = new Socket(host,port); OutputStream outputStream = socket.getOutputStream(); PrintWriter pw = new PrintWriter(outputStream); pw.write("用户名:admin 密码:123"); pw.flush(); socket.shutdownOutput(); InputStream inputStream = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); String info = null; while((info = br.readLine()) != null) { System.out.println("从服务端获取的消息:" + info); } br.close(); inputStream.close(); outputStream.close(); socket.close(); pw.close(); } }
        先运行客户端,然后运行服务端的话就会报错!很好理解,如果你没有服务端,客户端去连接谁呢?

        先运行服务端,再运行客户端,我们就能得到从客户端发往服务端的信息了

附:
想继续深入可以看下下面这篇文章。转自itliucheng
    仅自己学习复习记录使用,文章内容除自己理解外多为其他网络文章收集整理,侵删。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号