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

        寒假伊始,正式学习网络通信基础,虽然以前在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();

如果对套接字的输入输出流不甚了解,请看下图:
网络通信基础第一式——创建简单服务器_第1张图片
注:当你在指定端口创建了一个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很多,相当脆弱,别急,这才刚开始。。。。。。

你可能感兴趣的:(编程,框架,.net,socket,Mina)