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