使用 ServerSocket 建立聊天服务器-1
1.代码目录

2.ChatSocket.java
-----------------------------------------------------------------------------------------------------------------------------
package com.nantian.socket;
import java.io.IOException;
import java.net.Socket;
public class ChatSocket extends Thread{
//本地需要有一个socket对象,来接入传入的值
Socket socket;
/**
* 创建构造方法
*/
public ChatSocket(Socket s) {
this.socket=s;
}
/**
* 运行MyServerSocket类后,没有值输出后所写的方法
* @param out
*/
public void Out(String out) {
try {
socket.getOutputStream().write(out.getBytes("UTF-8"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 复写run方法,执行后台的功能
*/
@Override
public void run() {
/*
* //首先,对当前的socket实现数据的输出 //获取它的输出流 try { //BufferedWriter作为数据的输出,可以直接输出一行字符串了
* BufferedWriter bw= new BufferedWriter( new OutputStreamWriter(
* socket.getOutputStream())); //举例 int count=0; while (true) {
* bw.write("loop"+count); //每一秒执行一次 sleep(1000); } } catch (IOException e) { //
* TODO Auto-generated catch block e.printStackTrace(); } catch
* (InterruptedException e) { // TODO Auto-generated catch block
* e.printStackTrace(); }
*/
//上面这段代码太复杂了导致输不出内容
int count=0;
while (true) {
count++;
Out("loop+"+count);
//输出速度过快,每次输出后间隔500ms
try {
sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3.MyServerSocket.java
-----------------------------------------------------------------------------------------------------------------------------------------
package com.nantian.socket;
//ctrl+shift+o删除多余的jar包
public class MyServerSocket {
public static void main(String[] args) {
new ServerListener().start();
}
}
4.ServerListener.java
----------------------------------------------------------------------------------------------------------------------------------------------
package com.nantian.socket;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JOptionPane;
public class ServerListener extends Thread{
@Override
public void run() {
try {
//port取值范围:1-65535(通常取值较大,这样可以和系统的分开)
ServerSocket serverSocket=new ServerSocket(12345);
//循环监听来自客户端的连接
while(true) {
//监听客户端的连接
//accept()为一个阻塞的方法,会阻塞当前的线程
//ServerSocket的accept()方法是侦听并接受到此套接字的连接,
//就是一直等待连接,此方法在连接传入之前一直阻塞。直到接受到有socket的连接。
//故创建ServerLIstener extends Thread
Socket socket=serverSocket.accept();
//建立连接
JOptionPane.showMessageDialog(null, "有客户端连接到了本机的12345端口");
//因为每一个Socket要与客户端独立的通信,所以socket需要另起一个线程
//将socket传递给新的线程,用于socket通信,故创建ChatSocket extends Thread
new ChatSocket(socket).start();//现在就可以循环监听客户端连接上的线程了
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5.运行run as --> java application
运行截图:

------------------------------------------------------------------------------------------------------
cmd启动多个客户端,输入:telnet localhost 12345,截图如下:

==================================================================================================================================
以上代码只有对客户端发送数据的功能,并没有向客户端读取数据的功能.
使用 ServerSocket 建立聊天服务器-2,实现向客户端读取数据的功能
使用 ServerSocket 建立聊天服务器-1的更多相关文章
- Socket 基础解析使用ServerSocket建立聊天服务器
很简单的教程哦! 1.socket 简介 Socket 又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求.ServerSocket 用于 ...
- 使用ServerSocket建立聊天服务器(一)
-------------siwuxie095 工程名:TestMyServerSocket 包名:com.siwuxie095.socket ...
- 使用ServerSocket建立聊天服务器(二)
-------------siwuxie095 工程名:TestMyServerSocket 包名:com.siwuxie095.socket 类名:M ...
- 使用 ServerSocket 建立聊天服务器-2
1. 从serverListener中可以看出,每一个客户端创建新的请求之后,都会把它分配给一个独立的chatsocket ,但是每一个ChatSocket都是相互独立的,他们之间并不能沟通,所以要新 ...
- 使用Java建立聊天客户端
---------------siwuxie095 关于 聊天服务器,详见本人博客的分类:来一杯Java, 里面的 使用ServerSocket ...
- [CareerCup] 8.7 Chat Server 聊天服务器
8.7 Explain how you would design a chat server. In particular, provide details about the various bac ...
- openfire:基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件
基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件 上一篇文章介绍到怎么在自己的Java环境中搭建openfire插件开发的环境,同时介绍到怎样一步步简单的开发openfir ...
- 基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件
原文:http://www.cnblogs.com/hoojo/archive/2013/03/29/openfire_plugin_chatlogs_plugin_.html 随笔-150 评论- ...
- 使用rabbitmq实现集群im聊天服务器消息的路由
这个地址图文会更清晰:https://www.jianshu.com/p/537e87c64ac7 单机系统的时候,客户端和连接都有同一台服务器管理. image.png 在本地维护一份userI ...
随机推荐
- 1010 Radix:猥琐的测试数据
谨以此题纪念边界测试数据浪费了我多少时间:https://pintia.cn/problem-sets/994805342720868352/problems/994805507225665536 # ...
- PowerBuilder学习笔记之行删除卡死问题
在数据窗口勾选这两个选项后,在删除行数据时会导致系统直接崩溃退出
- JPA 一对一 一对多 多对一 多对多配置
1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...
- python 流程判断
import getpass# print("hello word") ## name= 'pangxiao'# mix_name=name# print(mix_name,nam ...
- C#判断字符串中含有多少个汉字
private void button1_Click(object sender, EventArgs e) { ArrayList itemList = new ArrayList(); CharE ...
- 前端相关UED团队和个人博客整理
平时收集的UED的团队和个人博客一些有关/*********************************这次真的是搬运工,原文转载自蓝色理想********************/ 前端团队推荐 ...
- FreeRTOS config开始的宏
FreeRTOSConfig.h系统配置文件中可以自定义,FreeRTOS.h中定义默认值 configAPPLICATION_ALLOCATED_HEAP 默认情况下FreeRTOS的堆内存是由编译 ...
- 开发一个简单的工具,导出github仓库所有issue列表
Jerry有一个github仓库,专门用来存放自己的知识管理,通过一条条的issue来记录具体的知识点: https://github.com/i042416/KnowlegeRepository/i ...
- RestFramework之解析器
一.什么是解析器? 对请求的数据进行解析 - 请求体进行解析. 解析器在你不拿请求体数据时 不会调用. 安装与使用: https://www.django-rest-framework.org/ 官方 ...
- 20.Vue中获取DOM元素和组件
1.获取DOM元素和组件:this.$refs