首页 > 编程语言 > 详细

简易版聊天室-Java-socket

时间:2020-07-15 00:28:57      阅读:64      评论:0      收藏:0      [点我收藏+]

随笔

已经有半个月没写文档了,到了大二,我深刻体会到了编程语言的博大精深,于是我陷入了思考,到底什么样算是会编程呢?我发现在一些Java书籍中,仅仅只是介绍了常用代码的使用方式,及作用,并没有涉及底层,构造原理,不懂底层也就谈不上修改,优化了,每当在写代码的时候,明明一个API下有那么多方法,我却仅仅只认得那么一两个方法,很多索引出的内容都要通过记忆单词的方式去过滤,学习知识都是照搬照抄,我真的了解编程吗?我想我并不会编程,我所使用的编程都是遵循原有的规则去实现的,那么这样走下去,我想我不会是一个程序员,顶多算一个代码搬运工,深知现状却无能为力,感慨万千:人生好难!

socket实现简易聊天室

源码1

package demo;
import java.net.*; 
import java.io.*; 
import java.util.*; 
 
public class Server { 
  int port; 
  List<Socket> clients; 
  ServerSocket server; 
  public Server() { 
try { 
  port = 8083; 
  clients = new ArrayList<Socket>(); 
  server = new ServerSocket(port); 
  System.out.println("服务器已启动"); 
  int co=1; 
  while (true) { 
    Socket socket = server.accept(); 
    clients.add(socket); 
    Mythread mythread = new Mythread(socket,co); 
    co++; 
    mythread.start(); 
  } 

} catch (Exception ex) { 
  System.out.println("vv"); 
} 
} 

public static void main(String[] args) { 
new Server(); 
} 

class Mythread extends Thread { 
Socket ssocket; 
private int count; 
private BufferedReader br; 
private PrintWriter pw; 
public String msg; 

public Mythread(Socket s,int c) { 
  ssocket = s; 
  count=c; 
} 

public void run() { 

  try { 
    br = new BufferedReader(new InputStreamReader(ssocket.getInputStream())); 
     
    msg = "欢迎【" +"Client "+count + "】进入聊天室!当前聊天室有【" + clients.size() + "】人"; 

    sendMsg(); 

    while ((msg = br.readLine()) != null) { 
       
      msg = "【" +"Client "+count + "】说:" + msg; 

      sendMsg(); 
      
    } 
  } catch (Exception ex) { 
  } 
} 
public void sendMsg() { 
  try { 
    System.out.println(msg); 

    for (int i = clients.size() - 1; i >= 0; i--) { 
      pw = new PrintWriter(clients.get(i).getOutputStream(), true); 
      pw.println(msg); 
      pw.flush(); 
    } 
  } catch (Exception ex) { 
  } 
} 
} 
} 

源码2

package demo;
import java.io.*; 
import java.net.*; 
import java.util.*; 
 
public class Client { 
 public int port = 8083; 
 Socket socket = null; 
 
 public static void main(String[] args) { 
  new Client(); //开始执行 
 } 
 
 public Client() { 
 
  try { 
   socket = new Socket("127.0.0.1", port); 
   new Cthread().start(); 
 
   BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
   String msg1; 
   while ((msg1 = br.readLine()) != null) { 
System.out.println(msg1); 
   } 
  } catch (Exception e) { 
 	} 
 } 

 class Cthread extends Thread { 
 
  public void run() { 
   try { 

BufferedReader re = new BufferedReader(new InputStreamReader(System.in)); 
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true); 
String msg2; 

while (true) { 

 msg2 = re.readLine(); 
 pw.println(msg2); 
} 
} catch (Exception e) { 
e.printStackTrace(); 
   } 
 
  } 
 } 
 
}

技术分享图片
最终效果图,当然这样是无法实现多人在线聊天的,可以通过telnet来实现在线聊天,只不过这个聊天室是一个匿名的,基于cmd窗口。

实现多人在线聊天

1.打开控制面板

2.找到功能和程序

技术分享图片

3.选择启用或关闭Windows功能

4.打开Windows当中的telnet功能

技术分享图片

5.win+R--->cmd-->输入telnet 127.0.0.1 端口号
技术分享图片
技术分享图片
如果让别的电脑连接聊天室需要将本机电脑的防火墙关闭(对方电脑与本机必须处于同一局域网下,否则需要将本机电脑的ip地址映射到公网上)

可能发生的问题

无法打开到主机的连接 端口23失败?
可能是端口错了,因为telnet的默认连接端口是23

格式:

telnet不仅仅能连接23端口,但是telnet默认连接是23端口
要连接其他端口,在cmd打命令
telnet 192.168.1.1 135,中间没有“:”,是一个空格`这样telnet就连接到了对方的135端口`

简易版聊天室-Java-socket

原文:https://www.cnblogs.com/effortfordream/p/13301711.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!