TCP套接字
Java为TCP协议提供了两个类:Socket类和ServerSocket类。一个Socket实例代表了TCP连接的一端。一个TCP连接是一条抽象的双向信道,两端分别由IP地址和端口号确定。
TCP客户端
典型的TCP客户端要经过下面三步:
1.创建一个Scoket实例:构造函数向指定的远程主机和端口建立一个TCP连接。
2.通过套接字的输入输出流(I/O
streams)进行通信:一个Scoket连接实例包括一个InputStream和一个OutputStream,它们的用法同于其他Java输入输出流。
3.使用Scoket类的close()方法关闭连接。
TCP服务器端
1.创建一个ServerSocket实例,并指定本地端口。此逃接字的功能是侦听该指定端口收到的连接。
2.重复执行:
a.调用ServerSocket的accept()方法以获取下一个客户端连接,基于新建立的客户端连接,创建一个Socket实例,并由accept()方法返回。
b.使用所返回的Socket实例的InputStream和OutputStream与客户端进行通信。
c.通信完成后,使用Socket类的Close()方法关闭该客户端套接字连接。
原理图:
下面程序示例:
TcpServer.java
package com.iboxpay.tcp; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class TcpServer { public static void main(String[] args) throws IOException { BufferedReader buffer = null; ServerSocket server= null; Socket s = null; InputStream is = null; OutputStream os = null; DataOutputStream dos = null; try { server = new ServerSocket(8080); s = server.accept(); is = s.getInputStream(); os = s.getOutputStream(); System.out.println("-----------welcome to tcp socket-------"); buffer = new BufferedReader(new InputStreamReader(is)); dos = new DataOutputStream(os); System.out.println(buffer.readLine());//输出 } catch (IOException e) { e.printStackTrace(); }finally{ buffer.close(); os.close(); is.close(); s.close(); server.close(); } } }
TcpClient.java
package com.iboxpay.tcp; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; public class TcpClient{ public static void main(String[] args) { String[] str = {"172.30.5.58","8080"}; try { client(str); } catch (IOException e) { e.printStackTrace(); } } public static void client(String[] str) throws IOException{ Socket s = null; InputStream ips = null; OutputStream ops = null; BufferedReader brKey = null; DataOutputStream dos = null; BufferedReader brNet = null; try { //Socket s=new Socket(InetAddress.getByName("192.168.0.213"),8001); if(str.length < 2) { System.out.println("Usage:java TcpClient ServerIP ServerPort"); return; } //建立Socket s =new Socket(InetAddress.getByName(str[0]),Integer.parseInt(str[1])); ips =s.getInputStream(); ops =s.getOutputStream(); dos = new DataOutputStream(ops); brNet = new BufferedReader(new InputStreamReader(ips)); while(true) { brKey = new BufferedReader(new InputStreamReader(System.in));//键盘输入 String strWord = brKey.readLine(); dos.writeBytes(strWord + System.getProperty("line.separator")); if(strWord.equalsIgnoreCase("quit")) break; } }catch(Exception e){ e.printStackTrace(); } finally{ dos.close(); brNet.close(); brKey.close(); s.close(); } } }
时间: 2024-12-14 17:51:03