黑马程序员_Java网络编程之TCP应用

来源:互联网 发布:淘宝一年营业额 编辑:程序博客网 时间:2024/05/19 18:12


1、tcp连接的特点及一般应用范围
tcp是一种面向连接(连接导向)的、可靠的、基于IP的传输层协议。
2、tcp的使用
在网络上的两个程序通过一个双向通信连接进而实现数据交换,这个连接被叫做Socket。Socket通常分为客户端和服务器端。Socket是TCP协议的一个十分流行的编程界面。一个客户端Socket由一个IP地址和一个端口号确定其唯一性。
(1)客户端Socket的常用构造方法。
  • Socket()。该方法创建一个Socket对象,该Socket对象不于任何服务器建立联系,要想与服务器建立联系,需要使用该对象提供的connect(SocketAddress endpoint) 方法,将此对象连接到知道的服务器上。
  • Socket(InetAddress address, int port)
    创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
  • Socket(String host, int port) 
    创建Socket并连接到主机ip为host的主机上,同时主机监听port端口
为了简便一般使用Socket(String host, int port) ,例如Socket socket = new Socket('11.203.2.237',8999),就带表创建一个socket客户端同时此socket连接IP地址为11.203.2.237的主机,同时主机监听端口8999。
(2)socket的常用方法。
getInputStream()。返回此Socket的输入流。
getOutputStream()。返回此Socket的输出流。
在返回的输入/输出流对象上建立过滤流。如DataInputStream、DataOutputStream或者PrintStream类,对于文本方式流对象可以使用InputStreamReader、OutputStreamReader、PrintWriter处理。
例如:
//得到Socket输出流
        OutputStream os = s.getOutputStream();  
        //创建数据传输流
        DataOutputStream dos = new DataOutputStream(os); 
        //将数据从客户端传输到服务器端  
        dos.writeUTF(str);
        dos.flush(); 
(3)关闭socket
s.close().

根据上文完成客户端代码:
public class Client {
public static void main(String[] args) throws Exception { 
//获取控制台输入字符串
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
//创建一个流套接字并将其连接到指定 IP 地址的指定端口号
        Socket s = new Socket("11.203.2.237", 7597); //ip为你运行服务器端socket代码的地址
        //得到Socket输出  
        OutputStream os = s.getOutputStream();  
        //创建数据传输流
        DataOutputStream dos = new DataOutputStream(os); 
        //将数据从客户端传输到服务器端  
        dos.writeUTF(str);
        dos.flush(); 
        Thread.sleep(2000); 
        //获取服务器端返回的输入流数据
        DataInputStream dis = new DataInputStream(s.getInputStream());//服务器通过输入管道接收数据流
       System.out.println("client  sysout --->"+dis.readUTF());
       dos.close();  
        s.close();  
    } 
}

对于服务器,一般使用ServerSocket创建服务器端的socket。其常用的构造方法是
new ServerSocket(),创建非绑定服务器套接字,没有与任何端口进行绑定需要使用bind(SocketAddressendpoint)ServerSocket 绑定到特定地址(IP 地址和端口号)上。
new ServerSocket(int port),通过监听该程序所在电脑上对应的端口号,来接收客户端发送的信息。
newServerSocket(int port, int backlog),利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。
newServerSocket(int port, int backlog, InetAddress bindAddr),使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。
一般我们使用new ServerSocket(int port)方法,同时由于1-1023端口号为系统保留,所以创建端口号时应该让端口号大于1023从而减少冲突。

服务器端代码如下:

public class Server {
public static void main(String[] args) throws Exception { 
//创建绑定到特定端口的服务器Socket。
        ServerSocket ss = new ServerSocket(7597);//在6666端口监听,准备连接客户端  
        while (true) {  
        //取得连接此端口的Socket对象
            Socket s = ss.accept(); 
            //获取客户端IP地址
            String clientip = s.getInetAddress().getHostAddress();
            System.out.println("IP地址为 "+clientip+" 连接了!"); 
            //获取客户端传输过来的输入流
            DataInputStream dis = new DataInputStream(s.getInputStream());//服务器通过输入管道接收数据流
            String ssss = dis.readUTF();
            //将传输过来的输入流再一次返回到客户端
            OutputStream os = s.getOutputStream();    
            DataOutputStream dos = new DataOutputStream(os);//创建数据传输流 
            dos.writeUTF(ssss);//客户端传输数据  
            dos.flush();  
            dos.close(); 
            s.close();  
        }  
    }  
}
0 0