关于简单聊天程序的问题

问题描述

服务器端:packagecom.eesina1;importjava.awt.BorderLayout;importjava.awt.Container;importjava.awt.FlowLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.IOException;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.HashMap;importjava.util.Map;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;importjavax.swing.JTextField;importcom.eesina1.ChatServer;publicclassChatServerimplementsActionListener,Runnable{JTextAreashowArea;JTextFieldmsgText;JFramemainJframe;JButtonsentBtn;JScrollPaneJSPane;JPanelpanel;Containercon;Threadthread=null;ServerSocketserversocket;SocketconnectToClient;DataInputStreaminFromClient;DataOutputStreamoutToClient;publicChatServer(){mainJframe=newJFrame("聊天-服务器端");con=mainJframe.getContentPane();showArea=newJTextArea();showArea.setEditable(false);showArea.setLineWrap(true);JSPane=newJScrollPane(showArea);msgText=newJTextField();msgText.setColumns(30);msgText.addActionListener(this);sentBtn=newJButton("发送");sentBtn.addActionListener(this);panel=newJPanel();panel.setLayout(newFlowLayout());panel.add(msgText);panel.add(sentBtn);con.add(JSPane,BorderLayout.CENTER);con.add(panel,BorderLayout.SOUTH);mainJframe.setSize(500,400);mainJframe.setVisible(true);mainJframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);try{//创建服务套接字serversocket=newServerSocket(5500);showArea.append("正在等待用户请求n");//侦听客户端的连接while(true){connectToClient=serversocket.accept();System.out.println("侦听到来自客户端的socket"+connectToClient);inFromClient=newDataInputStream(connectToClient.getInputStream());outToClient=newDataOutputStream(connectToClient.getOutputStream());//启动线程在后台来接收对方的消息thread=newThread(this);thread.setPriority(Thread.MIN_PRIORITY);thread.start();}}catch(IOExceptione){showArea.append("对不起,不能创建服务器n");msgText.setEditable(false);sentBtn.setEnabled(false);}}publicstaticvoidmain(String[]args){newChatServer();}//响应按钮事件,发送消息给对方publicvoidactionPerformed(ActionEvente){Strings=msgText.getText();if(s.length()>0){try{outToClient.writeUTF(s);System.out.println("服务器发送了消息!");outToClient.flush();showArea.append("我说:"+msgText.getText()+"n");msgText.setText(null);}catch(IOExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}}}//本线程负责将客户机传来的信息显示在对话区域publicvoidrun(){while(true){try{System.out.println("服务器端准备收信息!");showArea.append("对方说:"+inFromClient.readUTF()+"n");System.out.println("服务器收到了消息!");thread.sleep(1000);}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}}客户端:packagecom.eesina1;importjava.awt.BorderLayout;importjava.awt.Container;importjava.awt.FlowLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.IOException;importjava.net.Socket;importjava.net.UnknownHostException;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;importjavax.swing.JTextField;importcom.eesina1.ChatClient;publicclassChatClientimplementsActionListener,Runnable{JTextAreashowArea;JTextFieldmsgText;JFramemainJframe;JButtonsentBtn;JScrollPaneJSPane;JPanelpanel;Containercon;Threadthread=null;SocketconnectToServer;DataInputStreaminFromServer;DataOutputStreamoutToServer;publicChatClient(){mainJframe=newJFrame("聊天-客户端");con=mainJframe.getContentPane();showArea=newJTextArea();showArea.setEditable(false);showArea.setLineWrap(true);JSPane=newJScrollPane(showArea);msgText=newJTextField();msgText.setColumns(30);msgText.addActionListener(this);sentBtn=newJButton("发送");sentBtn.addActionListener(this);panel=newJPanel();panel.setLayout(newFlowLayout());panel.add(msgText);panel.add(sentBtn);con.add(JSPane,BorderLayout.CENTER);con.add(panel,BorderLayout.SOUTH);mainJframe.setSize(500,400);mainJframe.setVisible(true);mainJframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//创建套接字连接到服务器try{connectToServer=newSocket("localhost",5500);inFromServer=newDataInputStream(connectToServer.getInputStream());outToServer=newDataOutputStream(connectToServer.getOutputStream());}catch(UnknownHostExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}showArea.append("连接成功,请说话n");//创建线程在后台处理对方的消息thread=newThread(this);thread.setPriority(Thread.MIN_PRIORITY);thread.start();}publicstaticvoidmain(String[]args){newChatClient();}//响应按钮事件,发送消息给对方publicvoidactionPerformed(ActionEvente){Strings=msgText.getText();if(s.length()>0){try{System.out.println("客户端准备发消息!");outToServer.writeUTF(s);System.out.println("客户端像服务器发出了消息!");outToServer.flush();showArea.append("我说:"+msgText.getText()+"n");msgText.setText(null);}catch(IOExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}}}publicvoidrun(){while(true){try{showArea.append("对方说:"+inFromServer.readUTF()+"n");System.out.println("客户端从服务器收到了消息!");thread.sleep(1000);}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}}同时开一个服务器端和两个客户端,两个客户端向服务器端发消息,每个客户端都分别只能发一条服务器端能接收到的消息,然后还是可以发送消息,但是服务器端不能接收了。各位大侠帮帮忙啊!

解决方案

解决方案二:
好长啊。老夫无力。
解决方案三:
线程管理服务端
解决方案四:
从程序逻辑看,肯定是有问题的。举一例,ChatServerr中定义了三个field,SocketconnectToClient;DataInputStreaminFromClient;DataOutputStreamoutToClient;

那楼主的例子中,两个Client,那么这三个到底对应的是哪个Client?
解决方案五:
给个完整的聊天程序供楼主参考,
解决方案六:
呵,好长啊啊。。

时间: 2024-09-22 08:41:59

关于简单聊天程序的问题的相关文章

Linux下C语言多线程,网络通信简单聊天程序

原文:Linux下C语言多线程,网络通信简单聊天程序 功能描述:程序应用多线程技术,可是实现1对N进行网络通信聊天.但至今没想出合适的退出机制,除了用Ctr+C.出于演示目的,这里采用UNIX域协议(文件系统套接字),程序分为客户端和服务端.应用select函数来实现异步的读写操作. 先说一下服务端:首先先创建套接字,然后绑定,接下进入一个无限循环,用accept函数,接受"连接"请求,然后调用创建线程函数,创造新的线程,进入下一个循环.这样每当有一个新的"连接"被

java中UDP简单聊天程序实例代码_java

学过计算机网络通信的都知道,计算机之间传送数据由两种,即TCP通信和UDP通信.TCP是可靠的面向连接的通信协议,二UDP是不可靠的面向无连接的通信协议. java中有基于TCP的网络套接字通信,也有基于UDP的用户数据报通信,UDP的信息传输速度快,但不可靠! 基于UDP通信的基本模式: (1)将数据打包,称为数据包(好比将信件装入信封一样),然后将数据包发往目的地. (2)接受别人发来的数据包(好比接收信封一样),然后查看数据包中的内容. 客户机 复制代码 代码如下: package com

C#编写简单的聊天程序

程序的分析与设计 1.明确程序功能 如果大家现在已经参加了工作,你的经理或者老板告诉你,"小王,我需要你开发一个聊天程序".那么接下来该怎么做呢?你 是不是在脑子里有个雏形,然后就直接打开VS2005开始设计窗体,编写代码了呢?在开始之前,我们首先需要进行软件的分析与设计.就拿本 例来说,如果只有这么一句话"一个聊天程序",恐怕现在大家对这个"聊天程序"的概念就很模糊,它可以是像QQ那 样的非常复杂的一个程序,也可以是很简单的聊天程序:它可能只有

c++-请进!!如何用VC实现一个简单的语音聊天程序(C++)

问题描述 请进!!如何用VC实现一个简单的语音聊天程序(C++) 请问各位大神 如何实现一个简单的 语音聊天程序,需要用到哪些库,YY插件太多了,感觉开着YY太占内存和CPU了: 解决方案 http://download.csdn.net/detail/liuhuanxia84/2189833 解决方案二: http://download.csdn.net/detail/chen345/2834856 解决方案三: 一个简单的时钟程序<VC实现>

特别简单的Java聊天程序

问题描述 小弟刚学完java基础,练练手就做了一个特别简单的聊天程序,源代码如下:import java.net.*;import java.awt.*;import java.awt.event.*;public class Receive {Frame f=new Frame("聊天室");TextField tfIP=new TextField(15);TextArea lst=new TextArea();Label lb=new Label("IP");D

asp简单聊天室程序 一

很多以前的聊天室程序哦,只用到两个文件哦.下我看第一个html文件吧. <html><head><title>asp简单聊天室程序</title> <style>*{font:9pt 宋体;line-height:1.7}</style> <script> var XmlDom = document.createElement("xml"); XmlDom.onreadystatechange=func

asp简单聊天室程序 二

asp简单聊天室程序 二 <%@Language="JavaScript" CodePage="936"%><% var Nothing; Response.addHeader("Cache-Control","no-cahce"); if(!Session.Contents("Chat_User")) {     Session.Contents("Chat_User"

android Socket实现简单聊天小程序

android Socket实现简单聊天小程序,供大家参考,具体内容如下 服务器端: package org.hwq.echo; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public cla

ASP编程入门进阶(十一):Chat 聊天程序

编程|程序 通常的聊天室所采用的程序,也就是Chat程序了,其基本结构原理是不会采用到数据库的.那究竟采用什么技术呢?我们知道ASP变量当中Session变量的作用是记录单个用户的信息,并且能跟踪用户的行为. Application对象的作用则起的全局变量,可以实现站点多个用户之间在页面中共享信息的. 那可以想象,在针对当前聊天程序中,一个聊天成员即为一个Session变量,聊天成员之间的会话则当成Application变量进行共享显示,以使各成员都能看见. 那下面就采用一很经典的实例程序,进行