Java Socket多线程聊天


//服务器端

import java.io.DataInputStream; //导入数据输入流,读取数据
import java.io.DataOutputStream; //导入数据输出流,写入数据
import java.util.Scanner; //导入标准输入流,键盘输入
import java.net.*;  //导入Socket,ServerSocket类;
import java.io.IOException;


public class Server_Socket  {
public static void main(String[] args)
{
/**定义Socket通道和输入输出流**/
ServerSocket ser = null;  //服务器的Socket
Socket s = null; //Socket
DataInputStream in = null;//输入流dis
DataOutputStream out = null; //输出流dos
try{
//初始化操作
ser = new ServerSocket(1234);  //1234为端口号
s = ser.accept();   //阻塞
System.out.println("客户端已连入"+s);
out = new DataOutputStream(s.getOutputStream());  //输出流
in = new DataInputStream(s.getInputStream());  //输入流
SendToClient send = new SendToClient(out);   //Send类创建对象
send.start();  //开启新线程1
ReceiveFromClient receive = new ReceiveFromClient(in); //Receive类创建对象
receive.start();  //开启新线程2
}
catch(IOException e){   //捕获输入输出异常
System.out.println("监听异常!结束!");
System.exit(-1);
}
}
}


class SendToClient extends Thread{   //发送类继承线程
DataOutputStream out = null; 
Scanner sc = new Scanner(System.in);
public SendToClient(DataOutputStream out)
{    //构造方法
this.out = out;
}
public void run() //重写run()方法,由start()自动调用,开启新线程的执行内容
{   
while(true)
{
String str = sc.nextLine();
try{
out.writeUTF(str);
if(str.equals("byebye"))
{
System.exit(-1);
break;
}
}
catch(IOException e)
{
System.out.println("服务器发送异常!");
System.exit(-1);
}
finally{}
}
}
}


class ReceiveFromClient extends Thread{   //接受类
DataInputStream in = null;   //输入流
public ReceiveFromClient(DataInputStream in)
{
this.in = in;    //通过构造方法初始化输入流

public void run()
{    //开启的新线程将执行run()方法里面的内容
while(true)
{    //一直监听中
try
{
String str2 = in.readUTF();     //以UTF读取
System.out.println("客户端:"+str2);
if(str2.equals("byebye"))   //r如果对方说byebye就结束聊天,退出程序
{
System.out.println("对方离开!聊天结束!");
System.exit(-1);   //退出程序
break;
}
}
catch(IOException e)   //捕获输入流的异常,如果try代码内有异常,则执行catch代码
{
System.out.println("服务器端接收异常!程序结束!");
System.exit(-1);
}
finally{}
}
}

}

//客户端



import java.io.*;
import java.net.*;
import java.util.Scanner;


public class Client_Sockt {
public static void main(String[] args){
Socket s = null;
DataInputStream in = null;
DataOutputStream out = null;
try{
s = new Socket("127.0.0.1",1234);
//s = new Socket();
//InetAddress address = InetAddress.getByName("localhost"); //通过机名来获取IP地址
//InetSocketAddress iaddress = new InetSocketAddress(address,1234); //InetSocketAddress创建的对象接收ip和端口
//s.connect(iaddress);  //向Socket对象s的connect方法传递服务器的ip和端口
in = new DataInputStream(s.getInputStream());
out = new DataOutputStream(s.getOutputStream());
SendToServer send = new SendToServer(out);
send.start();
ReceiveFromServer receive = new ReceiveFromServer(in);
receive.start();
}
catch(IOException e){
System.out.println("客户端连接异常!程序结束!");
System.exit(-1);
}
finally{}
}
}


class SendToServer extends Thread{
DataOutputStream out = null;
Scanner sc = new Scanner(System.in);
public SendToServer(DataOutputStream out)
{
this.out = out;
}
public void run()
{
while(true)
{
String str = sc.nextLine();
try{
out.writeUTF(str);
if(str.equals("byebye"))
{
System.exit(-1);
break;
}
}
catch(IOException e){
System.out.println("客户端发送异常!程序结束!");
System.exit(-1);
}
finally{}
}
}
}


class  ReceiveFromServer extends Thread{
DataInputStream in = null;
public ReceiveFromServer(DataInputStream in)
{
this.in = in;
}
public void run()
{
while(true)
{
try{
String str2 = in.readUTF();
System.out.println("服务器端:"+str2);
if(str2.equals("byebye"))
{
System.out.println("对方离开!聊天结束!");
System.exit(-1);
break;
}
}
catch(IOException e){
System.out.println("客户端接收异常!程序结束!");
System.exit(-1);
}
finally{}
}
}
}

猜你喜欢

转载自blog.csdn.net/qq_33247122/article/details/51563747