`
王者无敌Java
  • 浏览: 69522 次
  • 性别: Icon_minigender_1
  • 来自: 盐城->长沙->深圳
社区版块
存档分类
最新评论

网络通信基础第一式——创建简单服务器

阅读更多
        寒假伊始,正式学习网络通信基础,虽然以前在Java程序设计课的实验课上我已经实现了简单的局域网聊天软件,但是感觉无论是服务器端还是客户机端的程序的健壮性都欠佳,一不小心就会崩溃,至整个程序于死地。而且,用户体验也很差,基本上找同学测试该软件时,我都得坐在他的旁边,生怕出错!所以,我决定寒假期间留校一星期好好再深入研究一下网络通信。因为我感觉这学期的计算机网络,TCP/IP以及Java程序设计等几门专业课学的都还不错,考试成绩也很理想,故有信心学好网络通信知识,并完善之前所编写的程序。
        长话短说,正式切入主题。我把网络通信基础比作一门武林绝学,而它的第一式便是创建一个简单的服务器,目的是能将客户机发来的字符串显示出来,并且再回送给客户机(客户机暂时使用telnet命令连接服务器)。

        以下是具体的代码实现:
第一步,在指定端口上创建一个ServerSocket对象,即服务器对象:
java.net.ServerSocket server = new java.net.ServerSocket(port);
System.out.println("服务器已经创建!" + "端口号是:" + port);

第二步,服务器创建成功后,便进入等待状态,等待客户机的连接:
// 等待客户机的进入,服务器进入阻塞状态
java.net.Socket client = server.accept();

注:调用服务器对象accept()方法时,程序就会“阻塞”在这个调用上,或者可以理解为服务器“卡”到这个函数调用上,直到有一个客户机连接上来,这个方法才会返回,返回一个Socket类对象,这个对象就代表了服务器与客户机之间的连接,以后,服务器与客户机的通信就在这个Socket类型的对象client上执行。

第三步,从Socket连接对象上调用方法得到输入输出流:
//从连接对象上得到输入/输出流对象
InputStream ins = client.getInputStream();
OutputStream ous = client.getOutputStream();

如果对套接字的输入输出流不甚了解,请看下图:

注:当你在指定端口创建了一个ServerSocket对象后,调用Server对象的accept()方法等待客户机连接进入;当客户机连接进入后,在服务器程序中,即得到了一个它们之间通话通道的连接对象Socket;最后,我们从这个Socket上得到输入输出流对象;当你向输出流中写数据时,数据就被发向客户机,如果你从输入流中读数据,读到的就是客户机发来的数据。

第四步,可以实现简单通信了。从输入流中读取数据,向输出流中写入数据,读到的是客户机发来的,写入的就会发送给客户机:
String msg = "您好!我是服务器king。。。\r\n";
byte[] data = msg.getBytes();// 取得组成这个字符串的字节
ous.write(data);// 用输出对象发送数据
ous.flush();// 强制输出
client.close();// 关闭与客户机的连接


第五步,整合之前的代码:
/**
 * 简单服务器的实现
 * @author king
 *
 */
public class ChatServer {
	/**
	 * 在指定端口上启动一个服务器
	 * 
	 * @param port
	 *            :服务器所用的端口号
	 */
	public void setUpServer(int port) {
		try {
			// 建立绑定在指定端口上的服务器对象
			ServerSocket server = new ServerSocket(port);
			System.out.println("服务器已经创建!" + "端口号是:" + port);
			// 让服务器进入等待状态:阻塞状态
			Socket client = server.accept();
			System.out.println("有一个客户机连接到服务器!");
			// 从连接对象上得到输入输出流对象
			InputStream ins = client.getInputStream();
			java.io.OutputStream ous = client.getOutputStream();
			String msg = "您好!我是服务器king。。。\r\n";
			byte[] data = msg.getBytes();// 取得组成这个字符串的字节
			ous.write(data);// 用输出对象发送数据
			ous.flush();// 强制输出
			client.close();// 关闭与客户机的连接
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	//主函数
	public static void main(String[] args) {
		ChatServer cs = new ChatServer();
		cs.setUpServer(9090);
	}
}

        以上便是一个简单服务器的实现过程,有过编程经验的人一定会发现这个服务器bug很多,相当脆弱,别急,这才刚开始。。。。。。
  • 大小: 47.4 KB
1
1
分享到:
评论
2 楼 王者无敌Java 2011-01-18  
hnwsj99 写道
不用闭门造车了,使用现成的框架吧,比如MINA,我最近写的一个程序就是基于MINA的,相当不错。。。

大哥。。。我是学生,得从基础开始啊!
1 楼 hnwsj99 2011-01-18  
不用闭门造车了,使用现成的框架吧,比如MINA,我最近写的一个程序就是基于MINA的,相当不错。。。

相关推荐

    计算机应用基础课件——网络基础知识.pptx

    6.2 数据通信的基本概念 6.3 局域网知识 6.4 实现Internet连接的相关技术 6.5 网络互连 6.6 共享文档和文件夹 6.7 Internet提供的服务 6.8 连接到Internet 6.9 共享上网 计算机应用基础课件——网络基础知识全文共53...

    GB-26875.3-2011 城市消防远程监控系统 第3部分:报警传输网络通信协议

    ——第1部分:用户信息传输装置; ——第2部分:通信服务器软件功能要求; ——第3部分:报警传输网络通信协议; ——第4部分:基本数据项; ——第5部分:受理软件功能要求; ——第6部分:信息管理软件功能要求。 ...

    服务器与存储技术基础介绍.pptx

    服务器与存储技术基础介绍 服务器与存储技术基础介绍全文共176页,当前为第1页。 课程目录 第一章: 什么是服务器 第二章: 服务器部件技术 第三章: 服务器相关软件及应用 第四章: 存储相关技术基础 服务器与存储技术...

    服务器硬件技术基础介绍.pptx

    服务器硬件技术基础介绍 服务器硬件技术基础介绍全文共55页,当前为第1页。 课程目录 第一章: 什么是服务器 第二章: 服务器部件技术 服务器硬件技术基础介绍全文共55页,当前为第2页。 第一章 什么是服务器 服务器...

    新手学HTML5移动开发——面向iOS和Android平台

    《新手学html5 移动开发——面向ios 和android 平台》的第i部分从第1章~第8章。第1章首先介绍了html4.01的基本原理,第2章通过生动且复杂的教程介绍了html5,其中包含了大量实例和屏幕截图。第3章详细介绍了css。在...

    Visual C++网络通信编程实用案例精选_7

    <br>目录介绍 第1章 Visual C++网络通信编程基础 1 1.1 Winsock1.1编程技术 1 1.1.1 Winsock的基本概念 1 1.1.2 Winsock的编程特点 2 1.1.3 Winsock基本的API 2 1.1.4 Winsock的...

    Visual C++.NET编程技术体验

    网络编程 13.1.4 示例——网上聊天应用程序 13.2.5 示例——简单的网页浏览器 13.3.3 示例——ISAPI服务器扩展编程 第14章 数据库编程 14.3.6 示例——ODBC数据库编程 14.5.5 示例——ADO编程 ...

    Visual C++.NET编程技术体验__实例源码

    网络编程 13.1.4 示例——网上聊天应用程序 13.2.5 示例——简单的网页浏览器 13.3.3 示例——ISAPI服务器扩展编程 第14章 数据库编程 14.3.6 示例——ODBC数据库编程 14.5.5 示例——ADO编程 ...

    C#全能速查宝典

    第1章 C#语言基础 1 1.1 常用概念、关键字及基础类 1 1.1.1 abstract关键字——抽象 1 1.1.2 as操作符——引用类型转换 3 1.1.3 base关键字——从派生类中访问基类的成员 3 1.1.4 变量——存储特定类型的数据 4 ...

    Visual C++网络通信编程实用案例精选_3

    <br>目录介绍 第1章 Visual C++网络通信编程基础 1 1.1 Winsock1.1编程技术 1 1.1.1 Winsock的基本概念 1 1.1.2 Winsock的编程特点 2 1.1.3 Winsock基本的API 2 1.1.4 Winsock的...

    网络安全第一阶段(基础篇).pdf

    3、仅主机模式(Host-Only):使用VMware Network Adapter VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的,Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。 Intenet——...

    Linux 高性能服务器

    《Linux高性能服务器编程》第一部分对Linux服务器编程的核心基础——TCP/IP协议进行了深入的解读和阐述,包括TCP/IP协议族、TCP/IP协议,以及一个经典的TCP/IP通信案例;第二部分对高性能服务器编程的核心要素进行了...

    用tcp ip 进行网际互联 第三卷:客户——服务器(含源代码) PDF格式 part1

    本书是一部计算机网络经典性教科书。它是目前美国大多数大学里所开设的计算机网络课程的主要参考书。目前国内外能见到的各种有关TCP/IP的书籍,其主要内容均出自本书。本书的特点是:强调原理,概念准确,深入浅出...

    GB-26875.4-2011 城市消防远程监控系统 第4部分:基本数据项

    ——第1部分:用户信息传输装置; ——第2部分:通信服务器软件功能要求; ——第3部分:报警传输网络通信协议; ——第4部分:基本数据项; ——第5部分:受理软件功能要求; ——第6部分:信息管理软件功能要求。 ...

    Visual C++网络通信编程实用案例精选_9(全)

    <br>目录介绍 第1章 Visual C++网络通信编程基础 1 1.1 Winsock1.1编程技术 1 1.1.1 Winsock的基本概念 1 1.1.2 Winsock的编程特点 2 1.1.3 Winsock基本的API 2 1.1.4 Winsock的...

    网络安全论文:浅谈办公网络安全——病毒防治.doc

    浅谈办公网络安全——病毒防治 随着信息化的不断扩展,办公网络在提高数据传输效率、实现数据集中、数据共享 等方面发挥着越来越重要的作用。办公网络安全是办公系统软硬件正常顺利运行的基本 前提,因此办公网络...

    Linux高性能服务器编程高清PDF(带书签)+源码

    《Linux高性能服务器编程》共17章,分为3个部分:第一部分对Linux服务器编程的核心基础——TCP/IP协议进行了深入的解读和阐述,包括TCP/IP协议族、TCP/IP协议,以及一个经典的TCP/IP通信案例;第二部分对高性能...

    Linux高性能服务器编程.pdf

    《Linux高性能服务器编程》共17章,分为3个部分:第一部分对Linux服务器编程的核心基础——TCP/IP协议进行了深入的解读和阐述,包括TCP/IP协议族、TCP/IP协议,以及一个经典的TCP/IP通信案例;第二部分对高性能...

    Linux高性能服务器编程

    《Linux高性能服务器编程》共17章,分为3个部分:第一部分对Linux服务器编程的核心基础——TCP/IP协议进行了深入的解读和阐述,包括TCP/IP协议族、TCP/IP协议,以及一个经典的TCP/IP通信案例;第二部分对高性能...

    计算机网络技术教学日历

    第1章计算机网络概述 1.1 计算机网络的概念与发展;1.2计算机网络的组成与分类;1.3计算机网络的功能;1.4数据通信基础 第2章 网络体系结构 2.1网络体系结构概述; 2.2物理层;2.3数据链路层 2.4网络层;2.5传输层...

Global site tag (gtag.js) - Google Analytics