一个客户端和一个服务器端聊天

*发送线程

    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.util.Scanner;

    public class SendThread extends Thread {
        private Socket socket;
        public SendThread(Socket socket){
            this.socket = socket;
        }
        @Override
        public void run() {
            //获得输出管道。
            try {
                OutputStream os = socket.getOutputStream();
                //接收键盘录入的数据。
                Scanner input = new Scanner(System.in);
                String str = null;
                while(true){
                    str = input.nextLine();
                    os.write((str+"\r\n").getBytes());
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

*接收线程

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.Socket;

    public class ReceiverThread extends Thread {
        private Socket socket;
        public ReceiverThread(Socket socket){
            this.socket = socket;
        }
        //接收数据。
        @Override
        public void run() {
            //获得读取管道。
            try {
                InputStream is = socket.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                String ip = socket.getInetAddress().getHostAddress();
                int port = socket.getPort();
                String str = null;
                while(true){
                    if(socket==null){
                        break;
                    }
                    str = br.readLine();
                    System.out.println(ip+"-"+port+":"+str);
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

*聊天客户端

    import java.io.IOException;
    import java.net.Socket;
    import java.net.UnknownHostException;

    /*
     * 一个客户端与一个服务端进行聊天。
     * 1:接收数据,
     * 2:发送数据。
     *     同时进行。:线程。 一个线程负责接收数据,一个线程负责发送数据。
     */
    public class ChatClient {
        public static void main(String[] args)  {
            try {
                Socket socket = new Socket("127.0.0.1",9988);
                //开启线程。
                new SendThread(socket).start();
                new ReceiverThread(socket).start();
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

*聊天服务器端

    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class ChatServer {
        public static void main(String[] args) {
            try {
                ServerSocket ss = new ServerSocket(9988);
                Socket s = ss.accept();
                new SendThread(s).start();
                new ReceiverThread(s).start();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
时间: 2024-12-28 09:52:23

一个客户端和一个服务器端聊天的相关文章

java在线聊天项目1.0版 异常处理——开启多个客户端,关闭一个客户端后,在其他客户端中再发出信息会出现异常的处理

异常一 只开启一个客户端,输入信息后关闭,客户端出现如下异常 根据异常说明 ChatClientFrame客户端117行 提示原因是Socket关闭 分析原因 客户端代码 while (connected) { String str = dis.readUTF(); 当窗口关闭后,Socket已经关闭,读的操作还在继续 处理这个异常,代码如下 catch (SocketException e) { System.out.println("a client has been closed!&quo

多个客户端与一个服务器端通信的问题

多个客户端与一个服务器端通信的问题 上篇博文主要是讲的关于客户端与服务器端的通信问题,在上篇博文中当我们只有一个客户端访问我们的服务器时是可以正常运行的,但是当我们有多个客户端访问我们的服务器时,我们的代码就不能正常工作了. 而在现实中,我们是很少有一个服务器只供一个客户端访问的,此篇博文就是来解决多个客户端访问我们服务器端的问题. 解决方法: 用一个多线程就可以解决 实现代码如下: 第一个:客户端的代码如下: package org.wrh.socketserver; import java.

实现一个的简单的网络聊天程序

本次实验采用Java语言,编写了一个简单的聊天室程序,可以实现多人之间的聊天.以下将对该程序进行详尽分析,并对比分析该编程语言提供的网络接口API与Linux Socket API之间的关系. 1. 网络通信相关要素 1) 协议 通信的协议还是比较复杂的, java.net 包中包含的类和接口,它们提供低层次的通信细节.我们可以直接使用这 些类和接口,来专注于网络程序开发,而不用考虑通信的细节. java.net 包中提供了两种常见的网络协议的支持: TCP:传输控制协议 (Transmissi

10、使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。 服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。

/**10.使用TCP协议完成一个客户端一个服务器.客户端从键盘输入读取一个字符串,发送到服务器. 服务器接收客户端发送的字符串,反转之后发回客户端.客户端接收并打印. * 客户端*/ import java.io.*; import java.net.*; public class Test10_Client { public static void main(String[] args) throws Exception { Socket s = new Socket("192.168.0.

PhantomJS是一个基于WebKit的服务器端JavaScript API

PhantomJS是一个基于WebKit的服务器端JavaScript API,它基于 BSD开源协议发布.PhantomJS无需浏览器的支持即可实现对Web的支持,且原生支持各种Web标准,如DOM 处理.JavaScript.CSS选择器.JSON.Canvas和可缩放矢量图形SVG.PhantomJS主要是通过JavaScript和CoffeeScript控制WebKit的CSS选择器.可缩放矢量图形SVG和HTTP网络等各个模块.PhantomJS主要支持Windows.Mac OS.L

如何创建一个客户端回调:js获得服务端的内容?

答案:表面上看去就是前端的js调用服务的C#方法,本质就是ajax,通过XMLHttpRequest对象和服务端进行交互.回调:就说回过头来调用,按理说js是一种脚本语言,怎么能用来调用服务端的呢?就是通过XMLHttpRequest实现的. 下面说一些具体的操作步骤 1.页面继承接口System.Web.UI.ICallbackEventHandler //继承接口使得:该页面可以作为服务器上的回调事件的目录 2.定义前端代码如下 <div> 请输入信息: <input type=&q

CreateMutex实现只能打开一个客户端

#include "stdafx.h" #include <Windows.h> #include <iostream> using namespace std; int _tmain (int argc, LPTSTR argv[]) { HANDLE h=CreateMutex(NULL,TRUE,"AAAAAAA"); if(GetLastError()==ERROR_ALREADY_EXISTS){ CloseHandle(h); r

java--socket实现一个客户端像另一个客户端发送信息

首先建立接收方socket服务端 package com.haier.socket.server; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.Socket; import org.apache.log4j.Logger; import com.haier.socket.PolicyServer; public class TVServer implements Runnable

python实现一个客户端与服务端的通信

函数介绍 Socket对象方法: 服务端: 函数 描述 .bind() 绑定地址关键字,AF_INET下以元组的形式表示地址.常用bind((host,port)) .listen() 监听TCP,可以挂起的最大连接数,该值至少为1,一般设为5即可 .accept() 被动接受TCP客户端的连接 客户端: 函数 描述 .connect() 初始化服务器连接 .connect_ex() 是对connect()函数的扩展,当出错时返回出错码,不报异常 其它函数: 函数 描述 .recv() 接收数据