//服务器端
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{}
}
}
}