您的位置:首页 > 理论基础 > 计算机网络

java网络编程一:模拟qq聊天功能,实现一对一聊天

2011-11-01 08:43 881 查看
1、socket和serverSocket通信简单介绍如下,注意客户端与服务器端是怎么交换数据的



2、模拟qq聊天功能,实现客户端与服务器(一对一)的聊天功能

服务器端代码:

view
plain

<span style="font-size:16px;">package demo.net;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.Scanner;

/**

* 模拟qq聊天功能: 实现客户端与服务器(一对一)的聊天功能,客户端首先发起聊天,输入的内容在服务器端和客户端显示,

* 然后服务器端也可以输入信息,同样信息也在客户端和服务器端显示

*/

// 服务器类

public class ChatServer {

private int port = 8189;// 默认服务器端口

public ChatServer() {

}

// 创建指定端口的服务器

public ChatServer(int port) {

this.port = port;

}

// 提供服务

public void service() {

try {// 建立服务器连接

ServerSocket server = new ServerSocket(port);

// 等待客户连接

Socket socket = server.accept();

try {

// 读取客户端传过来信息的DataInputStream

DataInputStream in = new DataInputStream(socket

.getInputStream());

// 向客户端发送信息的DataOutputStream

DataOutputStream out = new DataOutputStream(socket

.getOutputStream());

// 获取控制台输入的Scanner

Scanner scanner = new Scanner(System.in);

while (true) {

// 读取来自客户端的信息

String accpet = in.readUTF();

System.out.println(accpet);

String send = scanner.nextLine();

System.out.println("服务器:" + send);

// 把服务器端的输入发给客户端

out.writeUTF("服务器:" + send);

}

} finally {// 建立连接失败的话不会执行socket.close();

socket.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

new ChatServer().service();

}

}

</span>

客户端代码:

view
plain

<span style="font-size:16px;">package demo.net;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.Socket;

import java.util.Scanner;

/**

* 注意用到的输入输出流DataInputStream和DataOutputStream,成对出现,最好用字节流

*/

// 客户端类

public class ChatClient {

private String host = "localhost";// 默认连接到本机

private int port = 8189;// 默认连接到端口8189

public ChatClient() {

}

// 连接到指定的主机和端口

public ChatClient(String host, int port) {

this.host = host;

this.port = port;

}

public void chat() {

try {

// 连接到服务器

Socket socket = new Socket(host, port);

try {

// 读取服务器端传过来信息的DataInputStream

DataInputStream in = new DataInputStream(socket

.getInputStream());

// 向服务器端发送信息的DataOutputStream

DataOutputStream out = new DataOutputStream(socket

.getOutputStream());

// 装饰标准输入流,用于从控制台输入

Scanner scanner = new Scanner(System.in);

while (true) {

String send = scanner.nextLine();

System.out.println("客户端:" + send);

// 把从控制台得到的信息传送给服务器

out.writeUTF("客户端:" + send);

// 读取来自服务器的信息

String accpet = in.readUTF();

System.out.println(accpet);

}

} finally {

socket.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

new ChatClient().chat();

}

}

</span>

运行结果:





注意运行的时候要先开服务器,再开客户端,聊天由客户端发起。运行结果中绿色的字表示输入。

看完了,失望了吧,本人十月份开始看java的(以前有一点初步的了解),从《java常用类解析一:System类、Object类、Arrays类、Cloneable接口》到《java网络编程》系列。此篇文章的本意是熟悉一下socket编程的,但看了评论之后我决定写一个有界面实现部分qq功能的聊天工具软件,各位大神,看完之后如果觉得被忽悠了就给点思路吧!thank
you!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: