网络编程应用:基于TCP协议【实现一个聊天程序】
要求:
基于TCP协议实现一个聊天程序,客户端发送一条数据,服务器端发送一条数据
客户端代码:
package Homework1;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client {
public static void main(String[] args){
System.out.println("客户端已启动");
Socket socket=null;
InputStream is=null;
OutputStream os=null;
try {
//1.创建客户端套接字Socket对象
socket=new Socket("Localhost", 8888);
//2.创建与Socket对接的输入输出流对象
is=socket.getInputStream();
os=socket.getOutputStream();
//3.创建聊天用的Scanner对象
Scanner input=new Scanner(System.in);
byte[] bs=new byte[1024];
//4.给服务器(乙方)发送信息
while(true){
//输入要发送的数据
String string=input.next();
//将数据传输出去
os.write(string.getBytes());
os.flush();
//如果有一方回复了:bye,则表示聊天结束
if(string.equals("bye")){
break;
}
//5.接收服务器(乙方)回复的消息
int count=is.read(bs);
if(new String(bs,0,count).equals("bye")){
break;
}
System.out.println("服务器回复:"+new String(bs,0,count));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(socket!=null){
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(os!=null){
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(is!=null){
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
服务端:
package Homework1;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server {
public static void main(String[] args){
System.out.println("服务端已启动");
ServerSocket serverSocket=null;
InputStream is=null;
OutputStream os=null;
try {
//1.创建服务器端ServerSocket对象
serverSocket=new ServerSocket(8888);
//2.得到Socket对象
socket=serverSocket.accept();
//3.得到与Socket对应的输入输出流
is=socket.getInputStream();
os=socket.getOutputStream();
//4.创建聊天使用的Scanner对象
Scanner input=new Scanner(System.in);
byte[] bs=new byte[1024];
while(true){
//5.接收客户端(甲方)信息
int count=0;
count=is.read(bs);
//如果客户端回复了:bye,表示结束聊天
if(new String(bs,0,count).equals("bye")){
break;
}
System.out.println("客户端说:"+new String(bs,0,count));
//6.回复客户端(甲方)
String string=input.next();
os.write(string.getBytes());
os.flush();
if(string.equals("bye")){
break;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(os!=null){
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(is!=null){
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(socket!=null){
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(serverSocket!=null){
try {
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
运行结果:
客户端(甲方)聊天列表:
服务器端(乙方)聊天列表:
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· Ai满嘴顺口溜,想考研?浪费我几个小时
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想