客户端开启线程:
import java.io.IOException;
import java.net.Socket;
/*
* 一个客户端与一个服务端进行聊天。
* 1:接收数据,
* 2:发送数据。
* 同时进行。:线程。 一个线程负责接收数据,一个线程负责发送数据。
*/
public class ChatClient {
public static void main(String[] args) {
try {
Socket socket=new Socket("127.0.0.1", 8888);
SendThread sendThread=new SendThread(socket);//实现run接口的写法
new Thread(sendThread).start();//实现run接口的写法
new ReveicerTread(socket).start();//继承run的写法第一种
//ReveicerTread t=new ReveicerTread(socket);//继承run的写法第二种种
//t.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务端开启线程:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ChatServer {
public static void main(String[] args) {
try {
ServerSocket serverSocket=new ServerSocket(8888);
Socket socket=serverSocket.accept();
SendThread sendThread=new SendThread(socket);//实现run接口的写法
new Thread(sendThread).start();//实现run接口的写法
new ReveicerTread(socket).start();//继承run的写法第一种
//ReveicerTread t=new ReveicerTread(socket);//继承run的写法第二种种
//t.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端线程:
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class SendThread implements Runnable {
//创建一个构造函数用来接收socket
private Socket socket;
public SendThread(Socket socket) {
this.socket=socket;
}
OutputStream os=null;
Scanner sc=new Scanner(System.in);
public void run() {
//1.套接字直接传进来,不用创建
//2.获得输出管道
//run是父类方法,不能在抛出异常,因为子类异常要小于父类异常,而修饰符则是要大于等于父类
try {
os=socket.getOutputStream();
String str=null;
while(true){
str=sc.next();
if("886".equals(str)){
break;
}
os.write(str.getBytes());
os.write("\r\n".getBytes());
}
} catch (IOException e) {
e.printStackTrace();
}
try {
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务端线程:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class ReveicerTread extends Thread {
//创建一个构造函数用来接收socket
private Socket socket;
public ReveicerTread(Socket socket){
this.socket=socket;
}
@Override
public void run() {
try {
InputStream is=socket.getInputStream();
String ip=socket.getInetAddress().getHostAddress();
int port=socket.getPort();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
int len=-1;
String str=null;
while(true){
str=br.readLine();
if(str==null||"886".equals(str)||"\r".equals(str)||socket==null){
break;
}
System.out.println("发送ip: "+ip+"-端口 "+port+":"+str);
}
} catch (IOException e) {
e.printStackTrace();
}
// is.close();
//br.close();
//socket.close();
}
}
转载于:https://my.oschina.net/u/2541146/blog/596450