简易聊天客户端程序

import java.io.*;
import javax.swing.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class simpleChatClientA {
    JTextArea incoming;
    BufferedReader reader;
    Socket sock;
    JTextField outgoing;
    PrintWriter writer;
    //build the interface
    public void go(){
        JFrame frame = new JFrame("Gaby‘s specific chatClient");
        JPanel mainPanel = new JPanel();
        /*此处为一大堆GUI组件 incoming 和 JScrollPane的设置
         * 我在此忽略
         */
        outgoing = new JTextField(20);
        JButton sendButton = new JButton("send");

        mainPanel.add(outgoing);
        mainPanel.add(sendButton);
        sendButton.addActionListener(new buttonListener());

        frame.getContentPane().add(BorderLayout.CENTER, mainPanel);
        setUpNetWorking();
        Thread t = new Thread(new incomingReader());
        t.start();
        frame.setSize(300, 400);
        frame.setVisible(true);
    }

    //build the link between the class and the server
    public void setUpNetWorking(){
        try{
            sock = new Socket("192.168.0.105",5000);
            InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());
            reader = new BufferedReader(streamReader);
            writer = new PrintWriter(sock.getOutputStream());
            System.out.println("networking established");
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }

    //register to a button and send message to server
    class buttonListener implements ActionListener{
        public void actionPerformed(ActionEvent ev){
            writer.println(outgoing.getText());//因为输出时,只有等到缓冲区满了才输出,有些时候输出的内容比较少的时候,没有充满缓冲区,不会立刻输出的。
            writer.flush();
        }
    }
    //Runnable类使用多线程
    public class incomingReader implements Runnable{
        String message;
        public void run(){
            try{
                while((message = reader.readLine()) != null ){
                    System.out.println("read " + message);
                    incoming.append(message + "\n");
                }
            }catch(Exception ex){
                ex.printStackTrace();
            }
        }
    }

    //main
    public static void main(String args[]){
        simpleChatClientA client = new simpleChatClientA();
        client.go();
    }
}

View simpleChatClient.java

该程序可分为以下功能块:

  • go
  • setUpNetWorking
  • buttonListener implements ActionListener
  • incomingReader implements Runnable

go:

用于建立GUI,并调用 setUpNetWorking(),并且启动用于接收服务器信息的新线

setUpNetWorking:

通过让Socket sock充当这个对象的实例变量,使得其生存期伴随整个程序

同时,设置好reader和writer

buttonListener implements ActionListener(内部类):

在go里面向button注册了监听,如果遇到click,则由buttonListener对象处理,处理方式则是向服务器发送信息,意味着writer得是实例变量

incomingReader implements Runnable(内部类):

里面的run函数是新线程执行的内容,也因此用到了外部类对象的reader

时间: 2024-10-14 02:32:13

简易聊天客户端程序的相关文章

基于XMPP的IOS聊天客户端程序(XMPP服务器架构)

最近看了关于XMPP的框架,以文本聊天为例,需要发送的消息为: <message type="chat" from="[email protected]" to="[email protected]">          <body>helloWord</body>      </message> 基中from是从哪个用户发送的消息,to是发给谁的消息,XMPP的用户都是以邮箱形式.body就是我们

[iPhone高级] 基于XMPP的IOS聊天客户端程序(IOS端一)

介绍完了服务器,这篇我们就要介绍重点了,写我们自己的IOS客户端程序 先看一下我们完成的效果图 首先下载xmppframework这个框架,下载 点ZIP下载 接下来,用Xcode新建一个工程 将以下这些文件拖入新建工程中 加入framework 并设置 到这里我们就全部设好了,跑一下试试,看有没有错呢 如果没有错的话,我们的xmppframework就加入成功了. 我们设置我们的页面如下图: 我们的KKViewController.h [java]  view plain copy # imp

基于XMPP的IOS聊天客户端程序(IOS端一)

介绍完了服务器,这篇我们就要介绍重点了,写我们自己的IOS客户端程序先看一下我们完成的效果图 首先下载xmppframework这个框架, 点ZIP下载 接下来,用Xcode新建一个工程 将以下这些文件拖入新建工程中 加入framework 并设置 到这里我们就全部设好了,跑一下试试,看有没有错呢 如果没有错的话,我们的xmppframework就加入成功了. 我们设置我们的页面如下图: 我们的KKViewController.h #import <UIKit/UIKit.h>    @int

基于XMPP的IOS聊天客户端程序(IOS端三)

前两篇介绍了如何通过XMPP来发送消息和接收消息,这一篇我们主要介绍如何来美化我们的聊天程序,看一下最终效果呢,当然源程序也会在最后放出 好了,我们来看一下我们写的程序 这里我们自定义了TableViewCell 一行是显示发布日期,一行是显示发送的消息,还有一个是背景 -(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{            self = [sup

基于C# Winform的简易聊天程序[第一篇-两端通信]

程序简介 本聊天程序支持局域网内部客户端与服务端之间的互相通信. 原理 启动服务端后,服务端通过持续监听客户端发来的请求,一旦监听到客户端传来的信息后,两端便可以互发信息了.服务端需要绑定一个IP,用于客户端在网络中寻找并建立连接.信息发送原理:将手动输入字符串信息转换成机器可以识别的字节数组,然后调用套接字的Send()方法将字节数组发送出去.信息接收原理:调用套接字的Receive()方法,获取对端传来的字节数组,然后将其转换成人可以读懂的字符串信息. 界面设计 - 服务端 IP文本框 na

Socket编程(简易聊天室客户端/服务器编写、CocoaAsyncSocket)

Socket编程(简易聊天室客户端/服务器编写.CocoaAsyncSocket) 一.Socket 1.1 Socket简介 Socket就是为网络服务提供的一种机制.网络通信其实就是Socket间的通信,通信的两端都是Socket,数据在两个Socket间通过IO传输. 在Web服务大行其道的今天,调用Web服务的代价是高昂的,尤其是仅仅是抓取少量数据的时候尤其如此.而使用Socket,可以只传送数据本身而不用进行XML封装,大大降低数据传输的开销.Socket允许使用长连接,允许应用程序运

搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)

搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating-a-wpf-chat-client-server-application/ 注意:本教程是相当广泛的,如果你是在短请也看到我们的东西 开始和 如何在几分钟内创建一个客户端服务器应用程序教程. 注2:本例中包括,明显延长进一步证明功能,在包中包含的示例 包下载. 在我们开始之前确保您已经安装了Vis

PHP制作简易聊天程序

近几天来,突然在查阅PHP中文手册时,看到了用PHP制作聊天室的示例,于是一时心血来潮也用PHP写了一个简易的WEB聊天室应用,在写聊天室的过程中,我遇到的问题其实不算很多,因为用php制作聊天室的原理是非常简单的,也许这与我自身思考问题的方式有关,我往往喜欢把任何看似复杂的东西简单化,我相信表面复杂的事物,其实都蕴含着简易原理,我的这种思维模式在这次WEB聊天应用的制作中起到了作用,下面我就将PHP制作WEB聊天室的原理给大家做一个介绍: 首先我们要建立一个WEB框架,这个框架也就是利用HTM

Linux网络编程--聊天室客户端程序

聊天室客户端程序 #define _GNU_SOURCE 1 #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <string.h> #in