第四次作业

作业要求

将《TCP/IP网络编程》第1章的Hello客户服务器程序改成GUI小程序,并实现以下功能:
  1. 服务器程序 可以同时接收最多5个客户的访问。
  2. 实现迭代回声服务器功能,可以循环接收客户消息,并以特定消息(如“Quit”)结束服务。
  3. 考虑实现简单智能回复功能,即服务器根据客户的消息进行回答,或随机回复客户消息。

步骤

一、选择通信方式并实现

选择TCP实现在服务器端跟客户端通信,首先在TCP服务器端定义一个端口号,并创建ServerSocket对象,调用ServerSocket的accept()方法接收数据,并且等待客户端的连接服务器。

private static final int PORT = 7788;
private ServerSocket serverSocket;
this.serverSocket = new ServerSocket(PORT);
Socket socket = serverSocket.accept();

在客户端定义一个跟服务器相同的端口号,并创建一个Socket连接到给出IP地址跟端口号的服务器端。

private static final int PORT = 7788;
private String hostIP = "127.0.0.1";  //本机IP地址
private Socket socket;
socket = new Socket(hostIP, PORT);

接下来实现服务器跟客户机之间发送消息的机制,

BufferedReader br = getReader(socket);

private BufferedReader getReader(Socket socket)throws IOException{
    InputStream in = socket.getInputStream();
    return new BufferedReader(new InputStreamReader(in,"UTF-8"));
}

使用Socket的getInputStream()方法,返回一个InputStream类型的输出流对象,如果该对象有服务器端的Socket返回,就用于读取客户端发送的数据,反之用于读取服务器端发送的数据,并且使用BufferedReader包装将字节流转换成字符流的InputStreamReader。

bw.write(reply); //回显
bw.newLine();
bw.flush();

write()方法发送数据给客户端,newline()相当于插入一个行分割符,判断一行字符串是否结束,flush()方法刷新缓冲区
  发送数据的方法跟读取数据的方法差不多,使用getOutputStream()获得OutputStream类型的输出流对象,如果是该对象是服务器端的Socket返回,就用于向客户端发送数据,反之用于向服务器端发送数据,并且使用BufferedWriter包装字符流转换成字节流的OutputStreamWriter

BufferedWriter bw = null;

bw = getWriter(socket);

private BufferedWriter getWriter(Socket socket)throws IOException{
        OutputStream out = socket.getOutputStream();
        return new BufferedWriter(new OutputStreamWriter(out,"UTF-8"));
}
二、智能回复

找到一个网络接口,会根据相应的输入智能输出信息,网址:"http://api.qingyunke.com/api.php?key=free&appid=0&msg="+str。

三、实现图形化界面

首先给程序添加组件,下面以添加JTextArea为例,创建一个JTextArea对象跟JScrollPane对象,把JTextArea对象添加到JScrollPane对象中,再把JScrollPane对象添加到JFrame面板上,把输入的消息通过getText()获取到,并通过append()方法添加到JTextArea文本域中。

JScrollPane scrollPane = null;
JTextArea showContent = null;

showContent = new JTextArea();
showContent.setFont(new Font("仿宋",Font.BOLD,20));
scrollPane = new JScrollPane(showContent);

this.add(scrollPane, BorderLayout.CENTER);

String str = inputField.getText();  
showContent.append(showTime()+" 客户端"+":"+str+"\r\n");

采用边界布局管理器布局面板,把创建GUI面板需要用到组件相应的添加到面板中

实验GIF截图
Servers.gif

实验结论与感想

本实验需要首先启动服务器即net Server.java程序,但是不会有任何的输出,但是启动就一直在客户端的连接,即等待NetClient.java的运行。作业能够完成迭代回声服务器的相应功能,即服务器依次回复客户端发送的消息,\客户输入“Quit”结束当前服务开始服务下一个客户,最多回复5个客户端即停止提供服务。
  实验仍然有很大的改进空间,比如当第一次提供五个客户端服务完成之后,继续等待下次客户端的连接而不是关闭端口,这样做会造成下次连接需要再次打开服务器。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,494评论 18 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,800评论 6 13
  • 冯过 软件工程二班 1505060204 作业目的:用套接字编程写一个GUI小程序实现简单的只能回复功能。 实现过...
    ggala阅读 222评论 0 0
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,590评论 0 15
  • 饭快做好了,儿子去楼下骑平衡车也回来了,进屋把平衡车随便一放,自己就摊坐在地上一副若有所思的样子——应该是累...
    飞蛾娥阅读 362评论 0 1