`
徐静1570453590
  • 浏览: 9757 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

通信之——简单服务器

阅读更多

当你用QQ,人人,或者其他网上聊天工具和别人聊天时,你说的话,或者你发的表情怎么就能到达对方的视野内呢?你可能觉得很神奇吧!下面我来带你解开这个谜!首先就是要有一个服务器,作为两个或多个客户机之间信息传播的媒介。

建立一个指定接口的服务器:

ServerSocket ss1=new ServerSocket(port);
System.out.println("服务器创建成功!"+port);

等待客户机进入,进入之后生成一个Socket对象

 

Socket wait=ss1.accept();
System.out.println("wait.ss1:"+wait.getRemoteSocketAddress());

调用服务器对象server.accept()方法时,程序就会“阻塞”在这个调用上,或者说”卡”到这里,直到有一个客户机连结上来,这个方法才会返回,返回一个Socket类对象.但是当有多个客户机连接的时候,会发生阻塞,所以用线程去处理每一个连接对象,当有用户连入的时候,启动一个线程。

ServerThread ct=new ServerThread(client);
ct.start();

 一个简单服务器的完整代码:

package qunliaocome.cnxj0630;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JFrame;

public class Serve0630 {
	public static void main(String[]args){
		Serve0630 s=new Serve0630();
		s.Setupserver(9080);
		
	}
	public void Setupserver(int port){
		/**
		* 在指定端口上启动一个服务器
		* @param port:服务器所连的端口
		*/
		try{
			while(true){
		ServerSocket ss1=new ServerSocket(port);
		System.out.println("服务器创建成功!"+port);
		//讓服務器進入等待状态
		Socket wait=ss1.accept();
		System.out.println("wait.ss1:"+wait.getRemoteSocketAddress());
		process(wait);}
		}catch(Exception e){
		e.printStackTrace();
		}
		}
	/**
	* 处理连结对象:读取客户机发来的字符串,回送给客户机
	* @param client:与客户机的连结对象
	*/
	public  void process(java.net.Socket wait){
		try{
			//从连接对象上得到输出输入流对象
			 OutputStream ous= wait.getOutputStream();
			 InputStream ins=wait.getInputStream();
			 String ss="你好!欢迎您光临!";
			 byte[]data=ss.getBytes();
			 ous.write(data);
			 ous.flush();
			 String inputS=readString(ins);
			 while(!inputS.equals("goodbye")){
				 System.out.println("客户机说: "+inputS);
				 ss="服务器收到:"+inputS+"\r\n";
				 data=ss.getBytes();//取得组成这个字符串的字节
				 ous.write(data); //用输出对象发送!
				 ous.flush();//强制输出
				//读取客户机的下一次输入
				 inputS=readString(ins); //读取客户机的下一次输入
				 }
				 ss="你好,欢迎再来!\r\n";
				 data=ss.getBytes();
				 ous.write(data);
				 ous.flush();
				 wait.close();//半闭与客户机的连结
			
		}catch (Exception e){
			e.printStackTrace();
			
		}
		
	}
	/**
	* 从输入流对象中读取字节,拼成一个字符串返加
	* 如果读到一个字节值为13,则认为以前的是一个字符串
	* @param ins:输入流对象
	* @return :从流上(客户机发来的)读到的字符串
	*/
	private  String readString(InputStream ins) throws IOException {
		//创建一个字符串缓冲区
		StringBuffer stb=new StringBuffer();
		char c =0;
		while(c!=13){
		//遇到一个换行,就是一句话
		int i= ins.read();//读取客户机发来的一个字节
		c=(char)i;//将输入的字节转换为一个Char
		stb.append(c);
		}
		//将读到的字节组转为字符串,并调用trim去掉尾部的空格
		String inputS=stb.toString().trim();
		return inputS;
		
		}
}
	

 

 

<!--EndFragment--><!--EndFragment-->
1
2
分享到:
评论

相关推荐

    通信基础——实现服务器与客户端的交流

    标题“通信基础——实现服务器与客户端的交流”揭示了本文将深入探讨网络通信的基本原理,特别是涉及服务器和客户端之间的互动。在IT行业中,这种交互是网络应用的核心,无论是网页浏览、电子邮件、在线游戏还是文件...

    11.4.4 通信缓慢——服务器延迟 - Wireshark 数据包分析实战(第 3 版) - 知乎书店1

    在Wireshark数据包分析实战第三版中,我们聚焦于一个特定的问题——11.4.4章节讨论的“通信缓慢——服务器延迟”。这个场景通过分析一个名为"latency4.pcap"的网络捕获文件来展示。在图11-25中,我们看到在服务器...

    初识通信——多线程服务器的建立

    本文将详细讲解如何初识通信,并以多线程服务器的构建为例,来阐述相关技术点。 首先,理解多线程的概念至关重要。多线程是指在一个进程中可以同时执行多个线程,这样可以充分利用CPU资源,提高程序的执行效率。在...

    计算机网络课程设计——FTP服务器配置

    计算机网络课程设计——FTP服务器配置是指使用Serv-U服务器软件,构建FTP服务器,实现文件在客户端之间通过服务器的传输以及通过客户端实现文件上传、下载功能,并能够对服务器进行管理和维护。 一、网络基础知识 ...

    UDP通信——客户端循环向服务器端发送图像.rar

    UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了简单、快速的数据传输方式,但不保证数据的顺序、可靠性和无丢失性。在本文中,我们将深入探讨如何使用UDP进行图像通信,特别是在客户端循环向...

    VB源代码——代理服务器软件

    【VB源代码——代理服务器软件】是一个基于Visual Basic(VB)开发的代理服务器程序,它提供了HTTP代理服务,使得用户可以通过此服务器访问互联网。在编程领域,VB是一种面向对象的编程语言,尤其适用于快速开发...

    通信协议——Http、TCP、UDP

    ### 通信协议——Http、TCP、UDP #### 一、通信协议概述 通信协议是指在计算机网络中,为实现不同设备间的有效数据交换而制定的一系列规则和标准。这些规则规定了数据传输的方式、格式以及如何处理数据。常见的...

    网络通信——服务器端

    服务器端与客户端,服务器端的程序为:MyTcp.java,客户端的程序为:MyClient.java,不过由于csdn不能够支持同时将其上传,所以说我就不得已将其分开了。

    Socket局域网通信app——安卓

    在这个安卓app中,开发者利用了Java的Socket类来构建客户端和服务器端的通信桥梁,使得在同一局域网内的设备可以相互通信。 首先,我们需要理解TCP(Transmission Control Protocol)是一种面向连接的、可靠的、...

    通信协议——HTTP、TCP、UDP

    通信协议——HTTP、TCP、UDP TCP、HTTP、UDP 是三种不同的通信协议,它们之间存在着紧密的关系。TCP/IP 是一个协议组,可以分为四个层次:网络接口层、网络层、传输层和应用层。在传输层中有 TCP 协议与 UDP 协议。...

    手机安全卫士(3)——获取服务器更新配置

    本节我们将探讨“手机安全卫士(3)——获取服务器更新配置”这一主题,这涉及到应用如何通过网络与远程服务器进行通信,以获取最新的安全策略和更新数据。 首先,我们需要理解的是Android应用程序如何进行网络通信...

    使用MFC套接字CAsyncSocket进行网络通信——服务器端

    在本文中,我们将深入探讨如何使用MFC中的CAsyncSocket类进行网络通信,特别是构建服务器端应用程序。MFC(Microsoft Foundation Classes)是微软提供的一套面向对象的C++库,用于简化Windows应用程序的开发,而...

    server——服务器端

    在自己电脑上同时运行客户端1,2,3,与服务器通信,但是服务器上只有一个存了客户端1,2编号的链表,客户端1,2在与服务器通信建立后,要在自己键盘上键入自己名字告诉服务器,同时服务器回送成功消息给客户端1,2,...

    ASP.NET源码——FTP服务器源码(C245).zip

    这个压缩包"ASP.NET源码——FTP服务器源码(C245).zip"包含了一个用ASP.NET实现的FTP(File Transfer Protocol)服务器的源代码。FTP服务器允许用户通过网络上传、下载文件,是互联网上数据共享和传输的重要工具。 ...

    Java远程通信技术——Axis实战.doc

    【Java远程通信技术——Axis实战】 在互联网时代,网络通信技术是软件开发不可或缺的一部分。TCP/IP和UDP/IP作为底层传输协议,承载了大部分网络数据,而HTTP协议则在此基础上提供了超文本传输。Java中,有多种远程...

    QT——服务器+客户端进行tcp通信代码.rar

    在"QT——服务器+客户端进行tcp通信代码.rar"这个压缩包中,包含了一个客户端(client)和一个服务器端(server)的工程,这让我们有机会深入理解QT如何实现TCP/IP通信。 首先,TCP(传输控制协议)是互联网协议栈...

    网络通信基础第三式——实现服务器的启停

    NULL 博文链接:https://javaprince.iteye.com/blog/889200

    安卓Android源码——简易微信客户端和服务器源码.zip

    这篇文档将深入解析《安卓Android源码——简易微信客户端和服务器源码》的相关知识点,旨在帮助读者理解Android应用开发的基本原理以及如何构建一个简单的微信类通信应用。首先,我们要了解Android系统的基础架构和...

    服务器——基于CS模式的android手机与PC机通信系统的开发

    本项目标题为“服务器——基于CS模式的android手机与PC机通信系统的开发”,其核心是客户端-服务器(Client-Server, CS)架构,这种模式广泛应用于分布式系统中,允许不同平台的设备互相交互数据。 一、CS模式详解 ...

    网络通信——客户端

    服务器与客户端小程序,服务器端是MyTcp.java ,客户端是:MyClient.java,这里是客户端,由于csdn不支持将两个同时上传,所以说我只好将其分开了。

Global site tag (gtag.js) - Google Analytics