zoukankan      html  css  js  c++  java
  • 《java入门第一季》之tcp协议下的网络编程

    tcp协议相对于udp更加安全。

    首先看一下需求:服务器端开启,多个客户端同时向服务器发送数据,看哪个客户端先到达。

    说明:这里我开启三个电脑实验,一台电脑写服务器端的程序,两台电脑开客户端的程序。服务器先开启程序,客户端同时开启发送数据。

    客户端的程序:

    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.Socket;
    
    /*
     * TCP协议发送数据:
     * A:创建发送端的Socket对象
     * 		这一步如果成功,就说明连接已经建立成功了。
     * B:获取输出流,写数据
     * C:释放资源
     * 
     * 连接被拒绝。TCP协议一定要先开服务器。保证数据被收到,要先开始服务器端
     * java.net.ConnectException: Connection refused: connect
     */
    public class ClientDemo {
    	public static void main(String[] args) throws IOException {
    		// 创建发送端的Socket对象
    		// Socket(InetAddress address, int port)
    		// Socket(String host, int port)
    		Socket s = new Socket("192.168.1.105", 8888);//这个ip是服务器端的ip,和服务器端的端口号
    
    		// 获取输出流,写数据
    		// Socket类下面的方法:public OutputStream getOutputStream()
    		OutputStream os = s.getOutputStream();
    		os.write("hello,tcp,我来了".getBytes());
    
    		// 释放资源
    		s.close();
    	}
    }
    

    然后写出服务器端的程序:

    package cn.itcast_06;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /*
     * TCP协议接收数据:
     * A:创建接收端的Socket对象
     * B:监听客户端连接。返回一个对应的Socket对象
     * C:获取输入流,读取数据显示在控制台
     * D:释放资源
     */
    public class ServerDemo {
    	public static void main(String[] args) throws IOException {
    		// 创建接收端的Socket对象
    		// ServerSocket(int port)
    		ServerSocket ss = new ServerSocket(8888);
    
    		// 监听客户端连接。返回一个对应的Socket对象
    		// public Socket accept()
    		Socket s = ss.accept(); // 侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。直到发送端有数据创建Socket链接并发送数据
    
    		// 获取输入流,读取数据显示在控制台
    		InputStream is = s.getInputStream();
    
    		byte[] bys = new byte[1024];
    		int len = is.read(bys); // 阻塞式方法,只有等到流对象有了数据才能读取
    		String str = new String(bys, 0, len);
    
    		String ip = s.getInetAddress().getHostAddress();//获取客户端ip地址
    
    		System.out.println(ip + "---" + str);
    
    		// 释放资源
    		s.close();//防止多个客户端时出问题。因为不同的客户端应该对应不同的socket对象。
    		// ss.close(); //这个不应该关闭,因为有多个客户端的时候,一个客户端获取完数据,此时服务器却关闭了,则其他客户端就没法在服务器获取数据。
    	}
    }
    
    对于阻塞原理,以及遇到的问题。会在以后来分析。

  • 相关阅读:
    nginx内置高可用配置与第三方高可用模块nginx_ustream_check_mudule配置
    nginx+php,nginx+tomcat动静分离实战
    面向对象三大特性之多态与多态性
    面向对象三大特性之组合
    面向对象三大特性之继承与派生
    面向对象编程初探
    常用模块
    模块
    函数
    文件处理
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299733.html
Copyright © 2011-2022 走看看