java网络编程一:Socket用法,简单模拟一对一聊天

来源:互联网 发布:unity3d water4水插件 编辑:程序博客网 时间:2024/05/04 23:19

1、socket和serverSocket通信简单介绍如下,注意客户端与服务器端是怎么交换数据的

 

 

2、模拟qq聊天功能,实现客户端与服务器(一对一)的聊天功能

服务器端代码:

package demo.net;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.Scanner;/** * 模拟qq聊天功能: 实现客户端与服务器(一对一)的聊天功能,客户端首先发起聊天,输入的内容在服务器端和客户端显示, * 然后服务器端也可以输入信息,同样信息也在客户端和服务器端显示 */// 服务器类public class ChatServer {private int port = 8189;// 默认服务器端口public ChatServer() {}// 创建指定端口的服务器public ChatServer(int port) {this.port = port;}// 提供服务public void service() {try {// 建立服务器连接ServerSocket server = new ServerSocket(port);// 等待客户连接Socket socket = server.accept();try {// 读取客户端传过来信息的DataInputStreamDataInputStream in = new DataInputStream(socket.getInputStream());// 向客户端发送信息的DataOutputStreamDataOutputStream out = new DataOutputStream(socket.getOutputStream());// 获取控制台输入的ScannerScanner scanner = new Scanner(System.in);while (true) {// 读取来自客户端的信息String accpet = in.readUTF();System.out.println(accpet);String send = scanner.nextLine();System.out.println("服务器:" + send);// 把服务器端的输入发给客户端out.writeUTF("服务器:" + send);}} finally {// 建立连接失败的话不会执行socket.close();socket.close();}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {new ChatServer().service();}}


 

客户端代码:

package demo.net;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.Socket;import java.util.Scanner;/** * 注意用到的输入输出流DataInputStream和DataOutputStream,成对出现,最好用字节流 */// 客户端类public class ChatClient {private String host = "localhost";// 默认连接到本机private int port = 8189;// 默认连接到端口8189public ChatClient() {}// 连接到指定的主机和端口public ChatClient(String host, int port) {this.host = host;this.port = port;}public void chat() {try {// 连接到服务器Socket socket = new Socket(host, port);try {// 读取服务器端传过来信息的DataInputStreamDataInputStream in = new DataInputStream(socket.getInputStream());// 向服务器端发送信息的DataOutputStreamDataOutputStream out = new DataOutputStream(socket.getOutputStream());// 装饰标准输入流,用于从控制台输入Scanner scanner = new Scanner(System.in);while (true) {String send = scanner.nextLine();System.out.println("客户端:" + send);// 把从控制台得到的信息传送给服务器out.writeUTF("客户端:" + send);// 读取来自服务器的信息String accpet = in.readUTF();System.out.println(accpet);}} finally {socket.close();}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {new ChatClient().chat();}}


 

运行结果:

          

注意运行的时候要先开服务器,再开客户端,聊天由客户端发起。运行结果中绿色的字表示输入。

 

 

原创粉丝点击