使用TCP实现简单的聊天功能
程序员文章站
2024-03-22 18:12:52
...
简介
当我们在网上进行数据传输的时候,首先需要建立稳定的连接(针对于TCP),然后通过Socket(套接字)将数据以流的方式输入输出,让双方的数据进行交互。而对于UDP,只需要知道对方的地址即可,不需要进行稳定的连接。TCP比较稳定,效率低。UDP效率比较高,但不稳定。
用TCP实现简单聊天功能
创建一个客户端和一个服务器端,模拟通讯
创建一个服务器端
package Socket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* 服务器
*/
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket server=new ServerSocket(7832);//Socket的服务器 并且指定端口号
System.out.println("服务器开启监听!");
//服务器开始监听
Socket socket=server.accept();//服务器开始监听 阻塞
InputStream ins=socket.getInputStream();//返回此套接字的输入流。
OutputStream ous=socket.getOutputStream();//返回此套接字的输出流。
BufferedReader br=new BufferedReader(new InputStreamReader(ins));//将客户端那边的信息 放入缓存流
PrintWriter pw=new PrintWriter(ous,true);//通过Socket自带的流将数据 输出到客户端
Scanner input=new Scanner(System.in);
String str=null;
while (true){ //让客户端和服务器一直发送消息
System.out.println(br.readLine());//输出客户端的信息
str=input.nextLine();
pw.println("女朋友:"+str); //将信息输出到客户端
}
}
}
首先要创建一个服务器,并且指定端口号。端口号也就是每一个进程所特有的一个ID号(自己的理解),端口号的范围在0-65535之间,0-1023系统所保留,HTTP的端口号80。。。然后让服务器开启监听,如果有客户端连接,就通过Socket自带的输入输出流进行信息的交互。
创建一个客户端
package Socket;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
/**
* 客户端
*/
public class Client {
public static void main(String[] args) throws IOException {
// 指定服务器的IP地址 端口号
Socket socket=new Socket("localhost",7832);
InputStream is=socket.getInputStream();//得到Socket自带的输入流
OutputStream os=socket.getOutputStream();//得到Socket自带的输出流
BufferedReader br=new BufferedReader(new InputStreamReader(is));//将输入流 放入 缓存中
PrintWriter pw=new PrintWriter(os,true);//通过输出流 向服务器发消息
Scanner input=new Scanner(System.in);
String str=null;
while (true){
str=input.nextLine();
pw.println("我:"+str);//发消息
System.out.println(br.readLine());//收消息
}
}
}
创建一个客户端并且指定所连接的服务器的IP地址和端口号。因为我在自己电脑同时开启服务器和客户端,所以用localhost(本地IP地址)。如果你需要在两台电脑上测试的话,只需要改成对方服务器的IP地址即可。
开启服务器和客户端
一定要先开启服务器让服务器开启监听,再开启客户端,不然会报错。
运行截图:
总结
在使用Socket通讯时,当我们建立连接后,然后根据Socket自带的流getInputStream,getOutputStream进行数据的信息的输入输出。通过getInputStream将对方的信息输出到控制台,用getOutputStream将自己的信息输出给对方,从而达到了彼此通讯的效果。
每日鸡汤:有梦想的人睡不着,没梦想的人睡不醒。 这个世界根本不存在“不会”这回事,当你失去所有依靠的时候,你自然就什么都会了。
Over!
下一篇: 数组题目:存在连续三个奇数的数组