java怎么用mysql实现tcp聊天_Java实现基于TCP协议的Socket通信

本文介绍了Socket的基础知识,包括其在服务器端和客户端的角色,以及Socket通信模型。通过示例展示了如何使用Java实现一个简单的聊天室应用,包括服务器端的ServerSocket接受客户端连接,以及客户端Socket发送和接收消息。代码详细解释了ChatServer和ChatClient类的实现,允许多个客户端连接并相互通信。
摘要由CSDN通过智能技术生成

Socket介绍

Socket简介

Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。包含了网络通信所需要的五种基本信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。

Socket通信模型

981eb8441523b461ac5d3c569ba0d4d8.png

实现的功能

(1)实现了服务器和客户端之间的连接通信

(2)实现了客户端与客户端之间的连接通信

实现过程

(1)首先服务器启动,启动多线程,创建ServerSocket,等待客户端的链接

(2)启动客户端,创建一个socket并请求和服务器创建连接

(3)服务器接受客户端的请求,启动一个线程负责监听客户端的对话请求,并将改请求存在List中。

(4)服务器接受请求后,客户端启动线程监听来自服务器的消息

(5)按照协议进行通信

(6)关闭Socket

当服务器接受到已经建立连接的客户端请求时,将客户端的请求内容通过遍历List来发送给各个客户端,从而实现客户端和客户端之间的连接。

代码实现

ChatClient:客户端类

ChatServer:服务器类

ChatServer.java

package cn.newtol;

import java.io.*;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.ArrayList;

import java.util.List;

/**

*@Author: REN

*@Description:

*@Date: Created in 20:44 2018/5/29

*/

public class ChatServer {

private boolean started = false;

private List chatThreads = new ArrayList();

public static void main(String[] args) {

new ChatServer().startServer();

}

private void startServer(){

try {

//开启服务端Socket

ServerSocket serverSocket = new ServerSocket(8888);

started = true;

while(started){

//接受客户端连接请求

Socket socket = serverSocket.accept();

System.out.println("一个客户端已连接");

//开启线程处理客户端通信

ChatThread chatThread = new ChatThread(socket);

chatThreads.add(chatThread);

new Thread(chatThread).start();

}

} catch (IOException e) {

e.printStackTrace();

}

}

private class ChatThread implements Runnable{

private Socket socket;

private DataInputStream dataInputStream =null;

private DataOutputStream dataOutputStream =null;

private boolean isConnected = false;

OutputStream outputStream =null;

PrintWriter printWriter =null;

public ChatThread(Socket socket) {

super();

this.socket = socket;

}

//发送信息

private void send(String strMsgIn){

try{

dataOutputStream.writeUTF(strMsgIn);

dataOutputStream.flush();

}catch(IOException e){

e.printStackTrace();

}

}

@Override

public void run() {

try{

dataInputStream = new DataInputStream(socket.getInputStream());

dataOutputStream = new DataOutputStream(socket.getOutputStream());

//读取数据

isConnected = true;

while(isConnected){

String strMsgIn= dataInputStream.readUTF();

System.out.println(strMsgIn);

//接收到数据后发送给每个客户端

for(int i =0;i

chatThreads.get(i).send(strMsgIn);

}

}

}catch (IOException e) {

try {

//如果客户端出错或关闭,直接关闭连接,并移除List中的当前线程

socket.close();

chatThreads.remove(this);

} catch (IOException e1) {

e1.printStackTrace();

}

} finally{

try {

dataInputStream.close();

dataOutputStream.close();

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

ChatServer.java

package cn.newtol;

/**

*@Author: REN

*@Description:

*@Date: Created in 20:42 2018/5/29

*/

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.Socket;

import java.net.SocketException;

import java.net.UnknownHostException;

@SuppressWarnings("serial")

public class ChatClient extends Frame {

private TextArea textArea = new TextArea();

private TextField textField = new TextField();

private DataOutputStream dataOutputStream = null;

private DataInputStream dataInputStream = null;

private Socket socket = null;

private boolean isConnected = false;

private Thread thread=null;

public static void main(String[] args) {

new ChatClient().frameClient();

}

//聊天窗口

public void frameClient(){

setSize(400, 400);

setLocation(400,300);

add(textArea,BorderLayout.NORTH);

add(textField,BorderLayout.SOUTH);

pack();

textField.addActionListener(new TfListener());

//关闭窗口事件监听

this.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

disconnected();

System.exit(0);

}

});

this.connect();

setVisible(true);

}

//链接服务器地址

private void connect(){

try {

socket = new Socket("127.0.0.1", 8888);

thread=new Thread(new ChatThread());

thread.start();

dataInputStream = new DataInputStream(socket.getInputStream());

dataOutputStream = new DataOutputStream(socket.getOutputStream());

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

//断开连接

private void disconnected(){

isConnected = false;

try {

dataOutputStream.close();

dataInputStream.close();

socket.close();

} catch (IOException e1) {

e1.printStackTrace();

}

}

//键盘回车事件

private class TfListener implements ActionListener{

@Override

public void actionPerformed(ActionEvent e) {

String strMsg = textField.getText();

textField.setText("");

try {

dataOutputStream.writeUTF(strMsg);

dataOutputStream.flush();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

//开启线程接受服务器信息

private class ChatThread implements Runnable{

@Override

public void run() {

try {

dataInputStream = new DataInputStream(socket.getInputStream());

dataOutputStream = new DataOutputStream(socket.getOutputStream());

isConnected = true;

while(isConnected){

String msg= dataInputStream.readUTF();

String taText = textArea.getText();

textArea.setText(taText+msg+"\n");

}

}catch (SocketException e) {

System.out.println("客户端退出");;

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

运行方法

先启动服务器类,然后连续启动多个客户端类,在弹出的操作窗口中进行消息的发送即可。

源码下载地址

参考文献:

扫码关注作者个人技术公众号,有关技术问题后台回复即可,不定期将有学习资源分享

Java聊天室的设计与实现socket 设计软件源码+WORD毕业论文文档 Java聊天室系统主要用于实现在线聊天,基本功能包括:服务端和客户端。本系统结构如下: (1)服务端: 1、能够开启和关闭服务器 2、等待着客户端从特殊端口发送的请求 3、监听的端口并不是固定的,服务端的端口是能够自定义的 4、能够广播消息向所有连接到服务器的用户 (2)客户端: 1、能够和服务端进行连接 2、新的用户能够注册账号 3、通过用户名以及密码完成用户的登陆,连接到聊天室 4、用户能够在聊天室发送消息 目 录 摘要 I Abstract II 目 录 III 1 引言 1 2 网络聊天室的简介 2 2.1网络聊天室现状和发展 2 3 完成网络聊天室的技术以及环境 4 3.1 Java的介绍 4 3.2 Java的特点 4 3.3 TCP/IP协议的知识 5 3.4 Socket的介绍 6 3.5 开发工具 6 4 网络聊天室系统的设计 7 4.1项目概述 7 4.2 网络聊天室系统的设计 7 5 系统详细设计 8 5.1 服务器模块的设计 8 5.2 客户端模块的设计 8 6 系统测试 9 6.1 单元测试 9 6.2 系统测试 9 7 总结 10 参考文献 11 致谢 12 1 引 言 随着社会的发展和互联网技术的发展,普通老百姓也能够拥有属于自己的计算机,在平常的生活中也离不开了网络技术的支持,而替代了电话和写信的网上即时聊天成为了人们十分常见的沟通方式。 本软件是采用sun公司开发提供的java语言制作的,是基于C/S模型的网上聊天室。这个系统分为两个部分,服务端和客户端。服务端的工作主要是来监听和接收来自客户端的请求,然后处理客户端发来的消息,并通知客户端。而客户端的功能是能够让新用户注册,通过用户名密码登陆并且使用该系统。通过服务端和客户端的协同工作最终使用户能够使用网络聊天室,在聊天室中完成用户和用户之间的沟通。 2 网络聊天室简介 当今社会,能够实现即时通讯的软件使用频率是十分恐怖的,网络聊天室作为它的一种,使用人数也是相当可观的。国内处于垄断的QQ,业界老大哥微软的MSN都是大众关注和使用的焦点,普通老百姓也能够拥有属于自己的计算机,在平常的生活中也离不开了网络技术的支持,它是人们的生活变得十分的便利和高效,你能在网上找到自己想要的信息和有共同兴趣爱好的朋友。而且,现在很多的软件还有多人聊天,电子会议等一系列功能。 2.1 网络聊天室现状和发展 网上即时聊天室是广泛使用的一种技术,它的简单方便的沟通方式能够被广大的网上用户所使用。在当今社会,网上聊天是互联网服务重要的一环,有大约43%的用户都会使用网上聊天,是排在第四位。但是有很多人认为网络聊天室就是一种用来娱乐和打发时间的方式,而缺少了实际的价值。就目前来说,能够完成收入的网络聊天室其实并不多。它应该怎么实现自己的商业价值外界并没有过多的关注。 现在,很多企业都会开发属于自己的聊天室,用户通过该网站注册的用户名以及密码登陆到企业的服务器上。在聊天室中,用户之间可以通过输入文字以及各种符号来表达自己的想法,来达到互相之间的沟通。目前,开发一个供用户使用的网络聊天室的技术门槛并不是很高,也不需要大量的资金,国家对于这方面的管制和政策也没有太限制,所以当今社会上聊天室的竞争其实是很激烈的,腾讯,网易,新浪都有属于自己的网络聊天
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值