JAVA之TCP网络通讯

来源:互联网 发布:js math ceil 编辑:程序博客网 时间:2024/06/05 16:55
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。由IETF的RFC 793定义,在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。基于TCP网络通讯实现的类主要有服务器端的ServerSocket用客户端的Socket。通讯流程:打开服务器,等待客户端连接-->客户端连接上服务器-->数据通讯。代码实现步骤:
  1. 创建服务器端(ServerSocket)对象或客户端(Socket)对象。
  2. 建立起服务器与客户端连接
  3. 通过输入输出流进行文件(数据)通讯
  4. 通讯结束 ,关闭资源 。
    一个简单的小例子,服务端:
public class SocketServer {    public static void main(String[] args) {        try {            // 创建一个服务器ServerSocket,并指定端口号为5120            ServerSocket mServerSocket = new ServerSocket(5120);            // 等待客户端连接            Socket socket = mServerSocket.accept();            // 连接上客户端后,获取客户端输入流信息            InputStream is = socket.getInputStream();            // 通过获取缓冲数据方式来读取文本信息            BufferedReader br = new BufferedReader(new InputStreamReader(is));            // 获取文本信息            String line;            StringBuffer sb = new StringBuffer();            while ((line = br.readLine()) != null) {                sb.append(line);            }            System.out.println(sb.toString());            socket.shutdownInput();            // 收到客户端信息后,回复客户端信息            OutputStream os = socket.getOutputStream();            PrintWriter pw = new PrintWriter(os);            pw.write("收到回复,我是服务端");            pw.flush();            // 关闭流通常放在finally中操作            os.close();            br.close();            is.close();            pw.close();            socket.close();            mServerSocket.close();        } catch (IOException e) {            e.printStackTrace();        }    }}

客户端:

public class ClientSocket {    public static void main(String[] args) {        try {            // 创建客户端Socket,指定主机和端口            Socket mSocket = new Socket("localhost", 5120);            // 通过输入流向服务器发数据            OutputStream os = mSocket.getOutputStream();            PrintWriter pw = new PrintWriter(os);            pw.write("来自客户端Socket的数据,你收到了吗?");            pw.flush();            mSocket.shutdownOutput();            // 收取服务端的回复信息            InputStream is = mSocket.getInputStream();            // 通过获取缓冲数据方式来读取文本信息            BufferedReader br = new BufferedReader(new InputStreamReader(is));            // 获取文本信息            String line;            StringBuffer sb = new StringBuffer();            while ((line = br.readLine()) != null) {                sb.append(line);            }            System.out.println(sb.toString());            // 关闭流通常放在finally中操作            br.close();            is.close();            pw.close();            os.close();            mSocket.close();        } catch (UnknownHostException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

运行时,要先启动服务端,然后启动客记户端,通常网络通讯会与多线程交织在一起。

0 0
原创粉丝点击