网络最简单的echo回声(客户端发消息,服务端回复)
客户端:
package test;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class HelloClient {
public static void main(String[] args) throws IOException {
// 连接到本机的8788端口
Socket s = new Socket("127.0.0.1", 8788);
InputStream is = s.getInputStream(); //定义好输入流,用来接收消息
DataInputStream dis = new DataInputStream(is); //变为dataInputStream类型
System.out.println(dis.readUTF()); //接收第一个消息
OutputStream os = s.getOutputStream(); //定义输入流
DataOutputStream dos = new DataOutputStream(os);
while (true) { //开始循环,自己输入,然后等待服务器接收并回应
Scanner sca = new Scanner(System.in); //从键盘获取数据
String str;
str = sca.next();
if (str != null) {
dos.writeUTF(str); //发送给服务端消息
System.out.println("传来回音:" + dis.readUTF()); //接收服务端传来的消息
} else {
break;
}
}
}
}
服务端
package test;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.net.ServerSocket;
import java.net.Socket;
public class HelloServer {
public static void main(String[] args) throws IOException {
// InputStream is=new FileInputStream("");
// ObjectInputStream ois=new ObjectInputStream(is);
// DataInputStream dis=new DataInputStream(is);
//服务端打开端口8888
ServerSocket ss = new ServerSocket(8788);
//在8888端口上监听,看是否有连接请求过来
System.out.println("在8788端口上监听");
Socket s=ss.accept();
System.out.println("有接入的客户:"+s);
OutputStream os=s.getOutputStream(); //在客户端为发消息之前先发给客户端一句话
DataOutputStream dos=new DataOutputStream(os);
String str="echo回音";
dos.writeUTF(str);
InputStream is=s.getInputStream(); //定义输入流,接收客户端的消息
DataInputStream dis=new DataInputStream(is);
boolean b=true;
while(b){
String str1=dis.readUTF();
if(str1.equals("bye")){ //判断接受到的消息是bye那么立即结束回声
System.out.println("结束");
b=false;
}else if(str1==null){
System.out.println("空值");
b=false;
}else{
System.out.println(str1); //否则给客户端发送相同消息
dos.writeUTF(str1);}
}
dos.close();
os.close();
dis.close();
is.close();
s.close();
ss.close();
}
}
总结:不积跬步无以至千里,这个就是最简单客户端和服务端通讯,从这还可以演化有消息机器人等,连接数据库之后队传来的消息进行判断然后从数据库里面调取answer进行回应。
ps:知道的事情越多,越感觉自己知道的太少。时间等的越长,越觉得不可能,我有一个想买的东西,就一直攒钱当我感觉够了,在一看那个东西又贵了,我又攒钱,发现更贵了。我就怕有一天我在垃圾桶看见这个东西的时候还是忍不住捡起来。我很慌啊,我变成熟的速度没有你变优秀的速度快。总想几天就赶上你一年的成长,哎~我真的很想你啊。