网络编程应用:基于TCP协议【实现一个聊天程序】

时间:2024-10-23 23:06:50

要求:

基于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();
}
}
}
}
}

运行结果:


客户端(甲方)聊天列表:

网络编程应用:基于TCP协议【实现一个聊天程序】


服务器端(乙方)聊天列表:

网络编程应用:基于TCP协议【实现一个聊天程序】