chatroom服务器编程

合集下载

socket编程聊天室基本流程

socket编程聊天室基本流程

socket编程聊天室基本流程一、引言Socket编程是一种用于网络通信的编程技术。

它允许程序员创建客户端和服务器应用程序,这些应用程序可以在不同的计算机上运行并通过Internet或局域网相互通信。

在本文中,我们将介绍Socket编程聊天室的基本流程。

二、Socket编程概述Socket编程是一种基于TCP/IP协议的网络编程技术。

它使用套接字(socket)来实现网络通信。

套接字是一种抽象概念,它表示一个网络连接点,可以用来发送和接收数据。

在Socket编程中,客户端和服务器之间建立一个连接,然后通过这个连接进行数据传输。

客户端向服务器发送请求,并等待服务器响应。

服务器接收请求并处理它,并将响应发送回客户端。

三、Socket编程聊天室基本流程1. 创建服务器程序首先,我们需要创建一个服务器程序来监听客户端连接请求。

在Python中,可以使用socket模块来创建套接字对象,并使用bind()方法将其绑定到指定的IP地址和端口号上。

2. 创建客户端程序然后,我们需要创建一个客户端程序来连接到服务器。

同样地,在Python中可以使用socket模块来创建套接字对象,并使用connect()方法连接到指定的IP地址和端口号上。

3. 实现消息传输一旦客户端和服务器之间建立了连接,它们就可以开始进行消息传输。

在Socket编程中,可以使用send()方法将数据发送到对方,使用recv()方法从对方接收数据。

4. 实现聊天室功能为了实现聊天室功能,我们需要让多个客户端能够同时连接到服务器,并且能够相互通信。

为此,我们可以使用多线程或异步编程技术来实现。

在多线程模式下,每个客户端连接都会被分配一个独立的线程来处理。

这个线程负责接收客户端发送的消息,并将其转发给其他客户端。

在异步编程模式下,我们可以使用协程或回调函数来处理消息传输。

当有新的消息到达时,就会触发相应的回调函数进行处理。

5. 实现用户管理为了实现用户管理功能,我们需要让每个客户端都能够注册一个唯一的用户名,并且能够查看当前在线的用户列表。

计算机网络课设基于TCP协议编程的网络聊天室

计算机网络课设基于TCP协议编程的网络聊天室

基于TCP协议编程的网络聊天室设计内容:基于TCP协议编程的方式,编写程序模拟网络聊天室的运行过程。

设计要求:1. 采用C/S模式,基于TCP协议编程的方式,使得各个用户通过服务器转发实现聊天的功能。

2. 分为两大模块:客户端模块和服务器端模块。

3. 客户端模块的主要功能:1)登陆功能:用户可以注册,然后选择服务器登入聊天室。

2)显示用户:将在线用户显示在列表中。

3)接收信息:能接收其他用户发出的信息。

4)发送信息:能发出用户要发出的信息。

4.服务器端模块的主要功能:1)检验登陆信息:检查登陆信息是否正确,并向客户端返回登陆信息,如信息正确。

就允许用户登陆。

2)显示在线状态:将该用户的状态发给各在线用户。

3)转发聊天信息:将消息转发给所有在线的用户。

5. 编程语言不限。

一、需求分析此程序主要分为两部分:服务器端和客户端。

服务器端用于提供一个网络端口,等待客户端发出请求,登录到此服务端,然后进行网络通讯和消息的转发;客户端可通过服务器端的IP地址发送连接请求,然后登陆聊天室。

在服务器端的成员列表栏中会显示在线的所有人名单,有人退出聊天室,成员列表会自动除名。

整个程序的主体使用了CSocket 类的方法,实现了网络通讯聊天。

整个程序设计为两个部分:服务器(SpeakerServer)和客户端 (SpeakerClient) 。

多人聊天的关键在于要将每个客户端发送过来的消息分发给所有其他客户端,为了解决这个问题,在服务器程序中建立一个套接口链表,用来保存所有与客户端建立了连接的服务端口。

设计原理:服务器通过socket()系统调用创建一个Socket数组后(设定了接受连接客户的最大数目),与指定的本地端口绑定bind(),就可以在端口进行侦听listen()。

如果有客户端连接请求,则在数组中选择一个空socket,将客户端地址赋给这个socket,然后登陆成功的客户就可以在服务器上聊天了。

客户端程序相对简单,只要建立一个socket与服务器端连接,成功后通过这个socket来发送和接收就可以了。

SimpleChat程序(一对多聊天源代码 java)

SimpleChat程序(一对多聊天源代码 java)

package com.wyh.chatRoom;import java.awt.BorderLayout;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import .InetAddress;import .ServerSocket;import .Socket;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTabbedPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.JToolBar;public class wyhChatRoom extends JFrame implements ActionListener{ private String name; //服务器聊天室的图形用户界面private JComboBox combox; //网名private JTextField text; //输入IP地址或域名的组合框private JTabbedPane tab; //选项卡窗格,每页与一个Socket通信public wyhChatRoom(int port ,String name) throws IOException{super("聊天室"+name+" "+InetAddress.getLocalHost()+"端口:"+port);this.setBounds(320, 240, 440, 240);this.setDefaultCloseOperation(EXIT_ON_CLOSE);JToolBar toolbar=new JToolBar(); //工具栏this.getContentPane().add(toolbar,"North");toolbar.add(new JLabel("主机"));combox=new JComboBox();combox.addItem("127.0.0.1");toolbar.add(combox);combox.setEditable(true);toolbar.add(new JLabel("端口"));text=new JTextField("1251");toolbar.add(text);JButton button_connect=new JButton("连接");button_connect.addActionListener(this);toolbar.add(button_connect);tab=new JTabbedPane(); //选项卡窗口this.setBackground(Color.blue);this.getContentPane().add(tab);this.setVisible(true);=name;while(true){Socket client=new ServerSocket(port).accept();//等待接受客户端的连接申请tab.addTab(name, new TabPageJPanel(client));//tab添加页,页中添加内部类面板tab.setSelectedIndex(tab.getTabCount()-1);//tab指定新页为选择状态port++;}}public void actionPerformed(ActionEvent e){if(e.getActionCommand()=="连接"){String host=(String)combox.getSelectedItem();int port=Integer.parseInt(text.getText());try{tab.addTab(name, new TabPageJPanel(new Socket(host,port)));//连接成功tab添加页tab.setSelectedIndex(tab.getTabCount()-1);//tab指定新页为选中状态}catch(IOException e1){e1.printStackTrace();}}}//面板内部类,每个对象表示选项卡窗格的一页,包含一个Socket和一个线程private class TabPageJPanel extends JPanel implements Runnable,ActionListener{Socket socket;Thread thread;JTextArea text_receiver;//显示对话内容的文本区JTextField text_sender; //输入发送内容的文本行JButton buttons[]; //发送‘离线’删除页按钮PrintWriter cout; //字符输出流对象int index;TabPageJPanel(Socket socket) {super(new BorderLayout());this.text_receiver=new JTextArea();this.text_receiver.setEditable(false);this.add(new JScrollPane(this.text_receiver));JPanel panel=new JPanel();this.add(panel,"South");this.text_sender=new JTextField(16);panel.add(this.text_sender);this.text_sender.addActionListener(this);String strs[]={"发送","离线","删除页"};buttons =new JButton[strs.length];for (int i = 0; i < buttons.length; i++) {buttons[i]=new JButton(strs[i]);panel.add(buttons[i]);buttons[i].addActionListener(this);}buttons[2].setEnabled(false);this.socket=socket;this.thread=new Thread(this);this.thread.start();}@Overridepublic void run() {try {this.cout =new PrintWriter(socket.getOutputStream(),true);this.cout.println(name);//发送自己网名给对方BufferedReader cin=new BufferedReader(new InputStreamReader(socket.getInputStream()));String name=cin.readLine(); //接收对方网名index=tab.getSelectedIndex();tab.setTitleAt(index, name);String aline=cin.readLine();while(aline!=null && !aline.equals("bye")){tab.setSelectedIndex(index);text_receiver.append(aline+"\r\n");Thread.sleep(1000);aline=cin.readLine();}cin.close();cout.close();socket.close();buttons[0].setEnabled(false);//接收方的发送按钮无效buttons[1].setEnabled(false);//接收方的离线按钮无效buttons[2].setEnabled(false);//接收方的删除按钮无效} catch (Exception e) {e.printStackTrace();}}@Overridepublic void actionPerformed(ActionEvent e) {if(e.getActionCommand()=="发送"){this.cout.println(name+"说:"+text_sender.getText());text_receiver.append("我说:"+text_sender.getText()+"\n");text_sender.setText("");}if(e.getActionCommand()=="离线"){text_receiver.append("我离线\n");this.cout.println(name+"离线\n"+"bye");buttons[0].setEnabled(false);buttons[1].setEnabled(false);buttons[2].setEnabled(false);}}}public static void main(String[] args) throws IOException {new wyhChatRoom(2001, "航哥哥");//启动服务端,约定端口,指定网名}}。

聊天程序课程设计实验报告

聊天程序课程设计实验报告

聊天程序课程设计实验报告聊天程序的课程设计实验是一项相对复杂的课程设计。

本次实验的主要任务是开发一个由客户端和服务器组成的,可以实现客户端间的文本聊天的程序。

实验的具体实现方法是运用socket通信编程,使用C语言和JavaScript编写客户端和服务器端,利用html和css 构建聊天室的网页界面,实现客户端之间的聊天。

本次实验主要分为三部分:网络编程、网页构建和程序测试。

首先,实验者使用C语言编写客户端和服务器端,实现客户端之间的文本通信;接着,使用html和css构建聊天室网页界面,实现客户端的界面编程;最后,对实现的程序进行测试,确保程序实现所需要的功能。

本次实验实现了以上要求,实现了客户端之间的文本聊天和网页界面的构建,且程序在测试过程中没有发现任何问题,程序可以正常运行。

从这次实验中,实验者掌握了聊天程序的课程设计的相关知识,比如socket通信编程、html和css构建网页界面以及测试程序功能的方法,这些都可以在今后的聊天程序开发中发挥重要作用。

关键词:聊天程序;客户端;服务器;socket编程;HTML;CSS 1. 介绍聊天程序课程设计实验是一项通过计算机实现网络通信的一种实验项目,它包括客户端和服务器两部分,客户端主要是实现聊天室的界面,服务器则是负责网络通信的协调过程。

本次实验的主要任务是开发一个可以实现用户间文本聊天的程序,该程序包括客户端和服务器,可以使多个客户端之间进行文本聊天。

2.验准备本次实验的主要要求是实现一个可以实现多个客户端之间的文本聊天程序,因此需要考虑网络编程、网页构建以及程序测试等内容。

为了实现这一要求,首先要掌握socket编程,以及C语言和JavaScript等开发编程语言;其次,需要掌握HTML和CSS等网页构建语言;最后,也要掌握测试程序功能的方法。

3.验过程本次实验主要分为三部分:网络编程、网页构建和程序测试。

首先,实验者使用C语言开发客户端和服务器端,实现客户端之间的文本通信,同时也使用JavaScript语言实现客户端界面编程;接着,使用HTML和CSS构建聊天室网页界面,使聊天室更有趣;最后,对实现的程序进行测试,确保程序实现所需要的功能。

第6讲 聊天室设计(二)

第6讲  聊天室设计(二)

6.6 客户端聊天界面设计
四、代码实现(1/13) 1. import java.awt.*; //提供窗口组件 2. import .*; //提供套接字类 3. import java.awt.event.*; //提供事件响 应 4. import java.io.*; //提供输入输出流类 5. import java.util.Hashtable; //提供哈希 表类
6.5客户端输入昵称界面设计
四、代码实现 (6/8)
56. public void actionPerformed(ActionEvent e) { 57. if(e.getSource()==jrlts) { 58. tclts.setEnabled(true); 59. if(nflt==true) { 60. nameFile.setText("您正在聊天:"+name); } 61. else { 62. this.setName(nameFile.getText()); 63. String sex=group.getSelectedCheckbox().getLabel(); 64. if(socket!=null&&name!=null) { 65. try{ out.writeUTF("姓名:"+name+"性别:"+sex); } 66. catch(IOException ee) { 67. nameFile.setText("没有连通服务器"+ee); } 68. } //对应 61行 else 69. } //对应 57行 else 70. }//对应56行,方法结束
6.6 客户端聊天界面设计

基于bs的qq聊天软件的设计与实现-毕设论文

基于bs的qq聊天软件的设计与实现-毕设论文

2014 届毕业设计说明书基于B/S的QQ聊天软件的设计与实现院部:计算机与信息科学学院学生姓名:指导教师:职称指导教师:职称专业:计算机科学与技术班级:完成时间: 2014-5摘要在当今社会,随着网络的逐渐普及,互联网已经成为人们生活中必不可少的一部分,人们能够从互连网上获取所需要的信息并且通过互联网与朋友亲人交流,随着网络应用越来越广泛,如何快速获取所需要的信息已经成为时下必须要解决的问题。

要开发一个聊天室,首先,在我们脑海中,要有这个聊天室的初步的整体概况。

在诸多的公共聊天室中,其核心功能无非都是注册登录、群聊私聊、找回密码、退出,而管理员的核心功能大多数是登录、用户资料管理、在线用户管理、聊天记录管理等功能。

在聊天页面中,浏览器不断的对文本或数据库进行刷新、读取,并进行实时更新在线的用户。

本聊天室系统由JSP技术与MySQL数据库相结合基于B/S模式开发完成,以Struts2框架作为主要的技术框架,以MyEclipse8.5作为开发工具,以apache-tomcat-6.0.28做为服务器。

本聊天室系统的主要有普通用户和管理员两个角色,普通用户主要有注册登录、找回密码、群聊私聊、字体设置、背景颜色设置、在线音乐试听、退出这几个功能;管理员的主要功能有登录、在线用户管理、用户资料管理、过滤字段管理、聊天记录管理、音乐管理。

关键词:B/S;数据库;聊天室;MySQLABSTRACTIn today's society, with the growing popularity of the Internet, the Internet has become an essential part of people's life, people can find needed information from the Internet and communication through the Internet with the friend's close relatives, along with the network application more and more widely, how to quickly get the information they need to have become nowadays must solve the problem.To develop a chat room, first of all, in our mind, to have the general situation of the preliminary overall chat rooms.In many public chat room, its core function is nothing but a registered login, group of private chat, retrieve password, exit, and the core function of the administrator is most login, user information management, user management, online chat records management, and other functions.In the chat page, browser to refresh, reading of the text or database, real-time update and on-line users.This chat room system combined by the JSP technology and MySQL database based on B/S pattern development is complete, with the Struts2 framework, as the main technical framework, to MyEclipse8.5 as a development tool, with apache tomcat -- 6.0.28 as a server.This chat room system mainly has two roles ordinary users and administrators and ordinary users are registered login, retrieve password, group of private chat, font, background color Settings, online music audition, exit this a few functions;The main function of the administrator login, online user management, user information management, filtering, field management, chat records management, music.Key word: b/s; database; chatroom; mysql目录1 概述 (1)1.1 研究开发背景 (1)1.2 选题的意义 (2)1.3 国内外研究现状 (3)1.4 本文组织结构 (3)2 开发工具及技术介绍 (5)2.1 开发环境 (5)2.2 系统开发工具 (5)2.3 B/S结构的简介 (5)2.4 MySQL简介 (6)3 系统需求分析 (7)3.1 综合需求 (7)3.2 系统可行性分析 (7)3.2.1 技术及开发方法可行性 (7)3.2.2 管理可行性 (7)3.2.3 经济可行性 (8)3.3 功能需求 (8)3.3.1 用例分析 (8)3.3.2 场景分析 (9)4 系统设计 (11)4.1 系统总体设计 (11)4.2 系统功能模块 (11)4.2.1 前台页面的模块 (12)4.2.2 后台页面的功能模块 (12)4.2.3 系统流程图 (13)5 数据库设计 (15)5.1 数据库概念结构设计 (15)5.2 数据库逻辑结构设计 (16)5.3 数据库物理结构设计 (17)6 系统详细设计与实现 (19)6.1 用户注册 (19)6.2 用户登陆 (19)6.3 找回密码 (21)6.4 聊天室 (22)6.5 后台管理 (24)7 系统测试 (27)7.1 系统测试 (27)7.2 功能测试 (27)总结 (30)参考文献 (31)致谢 (32)1 概述在网络世界中,聊天室(Chat Room)是一个最常见的服务,它最早起源于BBS站点,聊天室作为一个在漫漫长夜打发消遣时间的最佳软件,除了能够用于聊天消遣时间以外,还拥有语音聊天、视频聊天、共享图片、文件等功能。

局域网内的多功能聊天室的设计与实现

局域网内的多功能聊天室的设计与实现

JISHOU UNIVERSITY专业课课程论文题目:局域网内的多功能聊天室的设计与实现作者:学号:所属学院:信息科学与工程学院专业年级:总评分:完成时间:吉首大学信息科学与工程学院局域网内的多功能聊天室的设计与实现局域网内的多功能聊天室的设计与实现(吉首大学信息科学与工程学院,湖南吉首 416000)摘要在计算机技术飞速发展的今天,随着Internet的普及和发展,人们的生活和工作也越来越离不开信息网络的支持,而聊天室是人们最常见、最直接的网上交流的方式。

本论文主要研究一个以网络交友为主,为广大用户提供一个借助网络进行人际交往的信息平台。

本文所设计的局域网聊天系统是基于开放的WEB服务器应用程序开发设计的,其主要特征是能动态完成信息的传递且具有高效的交互性,有效的处理客户请求且具有更简单、更方便的数据库访问方法,易于维护和更新。

这种技术程序由JAVA、HTML、数据库和脚本语言组合而成。

主要功能模块包括:用户登录、注册部分;编写和显示聊天记录部分;管理员管理聊天室的管理部分。

聊天系统编写和显示聊天记录部分界面友好,提供动作、表情、公聊或私聊等操作;管理部分可以删除不守规矩的注册用户、踢出在线用户以及删除某些不合时宜的聊天记录等、根据数据库需求分析,在ACCESS中定义3个表:用user表来存放注册用户信息、用activetable 表来存放当前在线用户信息以及用message表来存放聊天记录。

本系统相比较其他信息交流平台具有开发方便、快捷,占用资源少,维护方便等优点。

【关键词】Java,数据库,脚本语言,聊天系LAN of multi-function chat room design and ImplementationRaotao(College of Information Science and Engineering,Jishou University,Jishou,Hunan 416000)AbstractThe rapid development of computer technology today, with the popularity and development of Internet, people's work and life has become increasingly inseparable from the support of the information network, and the chat room is one of the most common, the most direct online communication mode.In this thesis, a network of friends, for the vast number of users with a network of have the aid of interpersonal information platform.The design of the LAN chat system is based on an open WEB server application development and design, its main characteristic is to complete the information transmission dynamically with high interactivity, effective customer request and has a more simple, more convenient database accessing method, easy maintenance and update.The technical program by JAVA, HTML, database and script language and combination.The main function modules include: user login, registration section; write and display chat recording part; the administrator manage the chat room management section.Chat system to prepare and display chat interface friendly, with action, expression, the public chat or operation; management can remove the unruly registered user, play online user and delete certain be inopportune or inappropriate chat records, according to the database needs analysis, defined in ACCESS 3: user table table for registered users of information, using activetable table to store the current online user information and the use of message table to store the chat record.This system is compared with other information exchange platform with the development of convenient, fast, less resource occupation, easy maintenance and other advantages.Key words:JA V A; data capture; information analysis ; Winpcap;Jpcap目录第一章引言 (1)1.1课题背景及意义 (1)1.2课题研究现状 (1)1.3研究内容 (2)1.4论文组织方式 (2)第二章关键技术 (3)2.1 JAVA概述 (3)2.2套接字 (3)2.2.1 Socket简介 (3)2.2.2 Socket工作过程 (4)2.3 TCP三次握手 (4)第三章需求分析 (5)3.1功能需求 (5)3.2性能要求 (5)3.2.1处理数据能力 (5)3.2.2时间特性 (5)3.2.3 数据库需求 (5)3.2.5 其他标准的约束 (5)3.2.6 外部接口需求 (6)3.2.7 通信接口 (7)第四章概要设计 (8)4.1体系结构设计 (8)4.1.1 复审数据流、控制流 (8)4.1.2软件体系结构 (8)4.2模块设计 (9)4.2.1 用户扫描系统模块 (9)4.2.2 在线交流系统模块 (10)4.2.3 系统配置系统 (11)第五章详细设计 (14)5.1用户登录模块 (14)5.2用户列表模块 (15)5.3文本聊天模块 (17)第六章测试及实现结果 (21)6.1测试环境 (21)6.2测试过程 (21)6.2.1用户登录及用户列表 (21)6.2.2 文本聊天 (22)6.2.3 文件传输 (25)结束语 (27)参考文献 (28)第一章引言1.1课题背景及意义在网络越来越发达的今天,人们对网络的依赖越来越多,各种网络应用层出不穷,网络编程越来越受大广大程序员的重视。

Java课程设计聊天室(含代码)

Java课程设计聊天室(含代码)

Java程序课程设计任务书JAVA聊天室的系统的设计与开发1.主要内容:用JAVA实现基于C/S模式的聊天室系统。

聊天室分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的信息,客户端需要登陆到服务器端才可以实现正常的聊天功能。

2.具体要求(包括技术要求等):系统的功能要求:A.服务器端主要功能如下:1.在特定端口上进行侦听,等待客户端连接。

2.用户可以配置服务器端的侦听端口,默认端口为8888。

3.向已经连接到服务器端的用户发送系统消息。

4.统计在线人数。

5.当停止服务时,断开所有的用户连接。

B.客户端的主要功能如下:1.连接到已经开启聊天服务的服务器端。

2.用户可以配置要连接的服务器端的IP地址和端口号。

3.用户可以配置连接后显示的用户名。

4.当服务器端开启的话,用户可以随时登录和注销。

5.用户可以向所有人或某一个人发送消息。

学习并掌握一下技术:Java JavaBean 等熟练使用一下开发工具:Eclipse, JCreator 等实现系统上诉的功能。

3.进度安排:12月28日 ~ 12月29日:课程设计选题,查找参考资料12月30日 ~ 1月1日:完成系统设计1月2日 ~ 1月5日:完成程序代码的编写1月6日:系统测试与完善1月7日:完成课程设计报告,准备答辩4.主要参考文献:[1].张广彬孟红蕊张永宝.Java课程设计(案例精编)[M].清华大学出版社.2007年版摘要在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,例如,国外的ICQ、国内腾讯公司开发的OICQ。

基于Java网络编程的强大功能,本次毕业设计使用Java编写一个聊天系统。

一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过Java提供的Soket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能用多线程可完成多点对多点的聊天,数据库管理系统用SQL Server2000完成并通过JDBC-ODBC桥访问数据库。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

广州大学学生实验报告
(***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***)
一、实验目的
实现客户端之间的文本聊天功能、文件传输功能。

二、实验要求
实现网络聊天室客户端和网络聊天室服务器端,功能如图1所示
图1 Java聊天室服务器端和客户端基本功能
客户端:显示在线人员信息(ip地址,昵称);显示在线人数;聊天消息中显示服务器系统时间。

允许两个客户端之间公聊、也允许两个客户端之间进行私聊;允许客户端屏蔽某个客户端,使屏蔽的客户端不能发送信息给自己。

六、实验程序
import java.io.*;
import .*;
import java.util.*;
public class server {
ServerSocket ss;
boolean isStarted=false;
List<Client> clients=new ArrayList<Client>(); //存放线程的列表
List<String> userNames=new ArrayList<String>(); //存放用户名的列表
String actors;
String userName;
//启动服务器
public void startServer()
{
Socket socket=null;
Client client=null;
InetAddress serverIP;
try
{
ss=new ServerSocket(8888); //建立Server Socket
isStarted=true;
}
catch(IOException e)
{
e.printStackTrace();
}
try
{
serverIP=InetAddress.getLocalHost(); //获取本机IP
System.out.println("服务器IP:"+serverIP.getHostAddress());
}
catch(Exception e)
{
System.out.println("Error!");
}
try
{
while(isStarted)
{
socket=ss.accept();
client=new Client(socket); //建立连接,创建一个server端线程与client端通信
new Thread(client).start(); //启动线程,主线程负责不断监听客户端的连接
clients.add(client); //将新线程加入列表
}
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
try
{
ss.close();//关闭socket
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
new server().startServer();
}
//创建一个与client端通信的server端线程
class Client implements Runnable
{
Socket s;
DataInputStream dis;
DataOutputStream dos;
boolean isConnected=false;
public Client(Socket s)
{
this.s=s;
try
{
dis=new DataInputStream(s.getInputStream());
dos=new DataOutputStream(s.getOutputStream());
isConnected=true;
}
catch(IOException e)
{
e.printStackTrace();
}
}
//发送数据
public void send(String str)
{
try
{
dos.writeUTF(str);
}
catch(IOException e)
{
e.printStackTrace();
}
}
public void run()
{
String str=null;
Client client=null;
try
{
while(isConnected)
{
str=dis.readUTF(); //接收数据
if(str.startsWith("*")) //接收到的是登陆者名
{
actors="*";
userName=str.substring(1,str.length());
System.out.println("用户:"+userName+"已登录!");
userNames.add(userName); //把新登录者名加入名字列表
for(int i=0;i<userNames.size();i++)
{
actors+=userNames.get(i);
}
str=actors;
}
else if(str.startsWith("#")) //接收到的是退出者的名字
{
actors="*";
userName=str.substring(1,str.length());
for(int i=0;i<userNames.size();i++)
{
if(userName.equals(userNames.get(i)))
{
userNames.remove(i); //从列表中删除退出者的名字
clients.remove(i); //从列表中删除退出者的线程
break;
}
}
for(int i=0;i<userNames.size();i++)
{
actors+=userNames.get(i);
}
str=actors;
}
for(int i=0;i<clients.size();i++) //向每个客户端发送数据
{
client=clients.get(i);
client.send(str);
}
}
}
catch(EOFException e)
{
System.out.println("用户:"+userName+"已退出!");
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
try{
//关闭流和socket
if(dis!=null) dis.close();
if(dos!=null) dos.close();
if(s!=null) s.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
}
三、总结心得
通过此实验使我加深了对http协议编程的认识,http可以通过传输层的tcp协议在客户端和服务器之间传输数据。

http协议是采用了请求/响应的工作方式。

基于http协议的客户端在每次向服务器端返回响应的消息。

相关文档
最新文档