zoukankan      html  css  js  c++  java
  • 网络编程(学习整理)---1--(Tcp)实现简单的控制台聊天室

    1、简单的聊天室(控制台):

        功能实现:

          客户端和服务端的信息交流:

    2、牵扯到的知识点:

       这个我大概说一下,详细后面见代码!

        

       1) 网络通讯的三要素
        1. IP
        2. 端口号。
        3. 协议

         2) InetAddress(IP类)

        常用的方法:
          getLocalHost(); 获取本机的IP地址
          getByName("IP或者主机名") 根据一个IP地址的字符串形式或者是一个主机名生成一个IP地址对象。 (用于获取别人的IP地址对象)

          getHostAddress() 返回一个IP地址的字符串表示形式。
          getHostName() 返回计算机的主机名

      

         3) 端口号是没有类描述的。
          端口号的范围: 0~65535
          从0到1023,系统紧密绑定于一些服务。
          1024~65535 我们可以使用....

         4) 网络通讯的协议:
          udp通讯协议

          tcp通讯协议。

       5)TCP
          (1)TCP通讯协议特点:
             1. tcp是基于IO流进行数据 的传输 的,面向连接。
            2. tcp进行数据传输的时候是没有大小限制的。
            3. tcp是面向连接,通过三次握手的机制保证数据的完整性。 可靠协议。
            4. tcp是面向连接的,所以速度慢。
            5. tcp是区分客户端与服务端 的。
            比如: 打电话、 QQfeiQ的文件传输、 迅雷下载....


          (2) tcp协议下的Socket:
            Socket(客户端) , tcp的客户端一旦启动马上要与服务端进行连接。
            ServerSocket(服务端类)

          (3) tcp的客户端使用步骤:
            1. 建立tcp的客户端服务。
            2. 获取到对应的流对象。
            3. 写出或读取数据
            4. 关闭资源。 

    3、下面直接贴上我测试的代码:

      客户端代码:  

     1 package cn.chating;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.BufferedWriter;
     5 import java.io.IOException;
     6 import java.io.InputStreamReader;
     7 import java.io.OutputStreamWriter;
     8 import java.net.Socket;
     9 import java.net.UnknownHostException;
    10 
    11 /**
    12  * 聊天:客户端
    13  * @author 小风微灵
    14  *
    15  */
    16 public class ChatClient {
    17 
    18     
    19     public static void main(String[] args) throws Exception {
    20         
    21         //建立客户端
    22         Socket client=new Socket("192.168.9.122",22222);
    23         /***********************************io start **************************************/        
    24         //得到输入的字符流对象
    25         BufferedReader reader=new BufferedReader(new InputStreamReader(client.getInputStream()));
    26         
    27         //得到输出的字符流对象
    28         BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
    29         
    30         //得到键盘输入流
    31         BufferedReader keywrite=new BufferedReader(new InputStreamReader(System.in));
    32         
    33         String content=null;
    34         
    35         String get=null;
    36         
    37         System.err.println("请输入要发送的信息:");
    38         
    39         while((content=keywrite.readLine())!=null){    //向服务端发送信息
    40             
    41             writer.write("客户端说:"+content);    
    42             writer.newLine();    //换行
    43             writer.flush();        //发送
    44             
    45             //接收服务端的信息
    46             if((get = reader.readLine())!=null){                
    47                 System.out.println("服务端说:"+get);
    48             }
    49         }
    50         /***********************************io end **************************************/        
    51         //关闭资源
    52         client.close();
    53     }
    54 
    55 }

      服务端代码: 

     1 package cn.chating;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.BufferedWriter;
     5 import java.io.InputStream;
     6 import java.io.InputStreamReader;
     7 import java.io.OutputStreamWriter;
     8 import java.net.ServerSocket;
     9 import java.net.Socket;
    10 
    11 /**
    12  * 聊天:
    13  *     一问一答的服务端
    14  * @author 小风微灵
    15  *
    16  */
    17 public class ChatServer {
    18 
    19 public static void main(String[] args) throws Exception{
    20         
    21         //建立socket服务端
    22         ServerSocket server = new ServerSocket(22222);
    23         
    24         //阻塞型的方法, 等待接收客户端的 连接
    25         Socket rsocket =server.accept();
    26         
    27 /***********************************io start **************************************/        
    28         //读取已连接的客户端发送的信息   输入字节流
    29         InputStream is = rsocket.getInputStream();
    30         
    31         //得到输入的缓冲字符流对象
    32         BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    33         
    34         //得到输出的字符流对象
    35         BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(rsocket.getOutputStream()));        
    36         
    37         //得到键盘的输入流
    38         BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in));
    39         
    40         String content = null;
    41         
    42         String send = null;
    43         
    44         while((content = reader.readLine()) != null){
    45             
    46             System.out.println("服务端接收到:"+content);
    47             
    48             //键盘挂起,  一次
    49             if((send = keyReader.readLine()) != null){  
    50                 writer.write(send);
    51                 writer.newLine();//换行
    52                 writer.flush();//发送
    53             }
    54         }
    55 /***********************************io end **************************************/        
    56         
    57         //关闭资源
    58         rsocket.close();
    59     }
    60 
    61 }
  • 相关阅读:
    ant 软件包不存在报错
    在 Internet Explorer 中使用 Windows 窗体控件
    智能客户端
    Back to the Future with Smart Clients
    "Automation 服务器不能创建对象" 的解决方案
    Top 10 Reasons for Developers to Create Smart Clients
    Updater Application Block for .NET
    Smart Client Application Model and the .NET Framework 1.1
    Security and Versioning Models in the Windows Forms Engine Help You Create and Deploy Smart Clients
    智能客户端技术总结(二)
  • 原文地址:https://www.cnblogs.com/newwind/p/5658531.html
Copyright © 2011-2022 走看看