如何实现双向聊天?
客户端与服务器端的通信过程,包括读信息和写信息,对于客户端和服务器端,如果将数据传给对方,就称为写,用到输出流;反之,如果从对方处得到数据,就为读,用到输入流。
TCP编程中,客户端和服务器端之间的通信是通过Socket实现的。
如何向对方发送信息?
从java.net.Socket文档中,会发现其中有一个重要函数:
public OutputStream getOutputStream() throws IOException//打开此Socket的输出流。
for example:
Socket socket = new Socket("192.168.32.1",8080);
OutputStream os = socket.getOutputStream();
如何从对方处接收信息?
打开java.net.Socket文档,会发现其中有一个重要函数:
public InputStream getInputStream() throws IOException//打开此Socket的输入流。
for example:
Socket socket = new Socket("192.168.32.1",8080);
InputStream is = socket.getInputStream(); // 得到输入流
明显,实现客户端和服务器端的通信,既需要读操作,也需要写操作。
服务器端代码:
package chat2;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(8080);
Socket s = ss.accept();
//获取对方传递过来的消息并打印
InputStream in = s.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String str = br.readLine();//读
System.out.println(str);
}
}
客户端代码:
package chat2;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("192.168.32.1",8080);
OutputStream os = socket.getOutputStream();//os只能发字节数组
PrintStream ps = new PrintStream(os);//ps功能更强大
ps.println("服务器,你好!");//信息发送出去
}
}