简单通信服务器

简单通信服务器
       在做通信的项目之前我们先了解服务器,我的理解是服务器类似于中转站,接受一个/多个客户端 的消息再转发给其他客户端,更形象的来说他像一个管道,连接着客户端! 因此,在实现通信前我们必须将管道接通,否则无法通信!
   
//创建绑定到特定端口的服务器套接字,duankou为端口号
       ServerSocket ss =new ServerSocket(duankou);
       // 侦听并接受到此套接字的连接
       Socket client = ss.accept();

       如此我们便建立了客户端与服务器的连接,如果还没有创建客户端所以可先使用系统自
带的客户端(打开cmd输入telnet 本机的ip 端口号 ——————————即可);
        接下来,在连通的基础上我们要实现互相发送消息的功能,这就要涉及到发送和接受消
息,两个方面了!这里为了规范我将发送和接受各自写一个方法。
   
/**
	 *发送消息
	 */
	 public void send(){
		try {
			//取得Socket对象的输出流
			OutputStream os=client.getOutputStream();
			//在窗体的显示文本框中显示输出的内容并转行
			//(用于服务器可视化,初学可不用)
			message=db.text2.getText()+"\r\n";
			//将字符串转换成byte使用输出流输出
			byte[] b=message.getBytes();
			os.write(b);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 *接收消息(先实现最简单的)
	 *@param client:
	 */
	public void receive(Socket client){
		try {
			InputStream is=client.getInputStream();
			//InputStreamReader 是字节流通向字符流的桥梁
			InputStreamReader inr=new InputStreamReader(is);
			//为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader
			//从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 
			BufferedReader bin=new BufferedReader(inr);
			String st = bin.readLine();//正行读取
			//循环的读取内容
			while(true){
			ClientList.CastMessage(this.user, st);
			//将cmd上的内容打印到窗体上
			db.text1.append(this.user.getUserName()+" : "+st+"\r\n");
			//读取一个文本行
			st = bin.readLine();
		}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
现在呢就能实现一个特别简单的服务器
小结一下:建立连接
            发送接收
          发送时:只需取得连接的Socket对象的输出流,将要发送的消息转换为byte数组即可
          接受时:应取得连接的Socket对象的输入流,将其转换为字符输入流在进行包装,这样做是为了可读取中文并达到最高效率。
(还有一种方法可在读取时正确读取中文而不出现乱码)
          
 InputStream is=client.getInputStream();
		            int length=is.available();
		            byte[] bytes=new byte[length];       
		            is.read(bytes);
		            String st=new String(nytes,"GB2312");  

    当然我们并不满足于此,我们还可以实现多个客户端同时发消息、将服务器可视化、设置用户列表、实现用户凭借用户名登陆、显示在线用户等。呵呵 ,这个下次再说!先消化这个就好! 

你可能感兴趣的:(服务器)