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的更多相关文章

  1. Socket 基础解析使用ServerSocket建立聊天服务器

    很简单的教程哦! 1.socket 简介 Socket 又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求.ServerSocket 用于 ...

  2. 使用ServerSocket建立聊天服务器(一)

    -------------siwuxie095                             工程名:TestMyServerSocket 包名:com.siwuxie095.socket ...

  3. 使用ServerSocket建立聊天服务器(二)

    -------------siwuxie095                         工程名:TestMyServerSocket 包名:com.siwuxie095.socket 类名:M ...

  4. 使用 ServerSocket 建立聊天服务器-2

    1. 从serverListener中可以看出,每一个客户端创建新的请求之后,都会把它分配给一个独立的chatsocket ,但是每一个ChatSocket都是相互独立的,他们之间并不能沟通,所以要新 ...

  5. 使用Java建立聊天客户端

    ---------------siwuxie095                             关于 聊天服务器,详见本人博客的分类:来一杯Java, 里面的 使用ServerSocket ...

  6. [CareerCup] 8.7 Chat Server 聊天服务器

    8.7 Explain how you would design a chat server. In particular, provide details about the various bac ...

  7. openfire:基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件

    基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件 上一篇文章介绍到怎么在自己的Java环境中搭建openfire插件开发的环境,同时介绍到怎样一步步简单的开发openfir ...

  8. 基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件

    原文:http://www.cnblogs.com/hoojo/archive/2013/03/29/openfire_plugin_chatlogs_plugin_.html 随笔-150  评论- ...

  9. 使用rabbitmq实现集群im聊天服务器消息的路由

    这个地址图文会更清晰:https://www.jianshu.com/p/537e87c64ac7 单机系统的时候,客户端和连接都有同一台服务器管理.   image.png 在本地维护一份userI ...

随机推荐

  1. python学习-53 正则表达式

    正则表达式 就其本质而言,正则表达式是一种小型的/高度专业化的编程语言,它内嵌在python中,并通过RE模块实现,正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行. 1.元字符 - ...

  2. PAT(B) 1029 旧键盘(Java)字符串

    题目链接:1029 旧键盘 (20 point(s)) 题目描述 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及实际被输入的文字,请你列出肯定坏掉的 ...

  3. AVR单片机教程——开发板介绍

    本教程使用EasyElectronics开发板: EasyElectronics是一款基于AVR单片机的开发板.AVR单片机是基于改进的哈佛架构.8~32位的一系列RISC微控制器,最初由Atmel公 ...

  4. 怎样检测浏览器是否安装了某个插件, 比如flash

    首先, 我们可以获取浏览器安装的所有在插件: navigator.plugins 它会返回一个类似数组的对象, 包含所有已安装插件的具体信息. navigator.plugins; 然后我们可以通过正 ...

  5. dfs的剪枝优化

    两个剪枝问题 1. 当两点的距离(需要走的步数)大于剩下的时间时 剪去 2.奇偶剪枝问题 如果起点到终点所需走的步数的奇偶性与时间奇偶性不同的时候 剪去 起点到终点步数的奇偶性的判断 首先 明确点的奇 ...

  6. 编写Postgres扩展之五:代码组织和版本控制

    原文:http://big-elephants.com/2015-11/writing-postgres-extensions-part-v/ 编译:Tacey Wong 在关于编写Postgres扩 ...

  7. 【转载】 C#使用string.Join快速用特定字符串串联起数组

    在C#中有时候我们的数组元素需要通过一些特定的字符串串联起来,例如将整形Int数组通过逗号快速串联起来成为一个字符串,可以使用String.Join方法.或者一个字符串string类型数组所有元素快速 ...

  8. K2 BPM_采购端到端解决方案,激活合规采购新动能_十年专注业务流程管理系统

    「方案背景」企业管理标准化演进之路 企业的成长离不开标准化,企业的可持续发展更离不开标准化.随着市场竞争的日趋激烈,标准化已经成为企业参与市场竞争的战略性手段,也成为企业可持续发展的重要手段.聚焦到采 ...

  9. Dockerfile的编写(主观汇聚篇)

    目录 一.什么是dockerfile 二.Dockerfile的基本结构 Dockerfile文件说明 三.总结 一.什么是dockerfile dockerfile是使用者用来自定义构建一个dock ...

  10. spark coalesce和repartition的区别和使用场景

    区别: repartition底层调用的是coalesce方法,默认shuffle def repartition(numPartitions: Int)(implicit ord: Ordering ...