ServiceDemo,ClientDemo Socket chat

ServiceDemo:

package com.demo.service;

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 ServiceDemo {




public static void main(String[] args) {
try {
new ServiceDemo().service();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void service() throws IOException{
ServerSocket server=new ServerSocket(800);
while(true){
System.out.println("正在等待客户端连接");
Socket so =server.accept();//监听客户端连接
new Server(so).start();
//System.out.println("客户端连接成功");

}
}

class Server extends Thread{

private Socket so;


public Server(Socket so) {

this.so = so;
}


@Override
public void run() {
InputStream in=null;//in 接收
OutputStream out=null;//out 发送

try {
in=so.getInputStream();
out=so.getOutputStream();

String str="你吃早餐了吗";
out.write(str.getBytes());
out.write(' ');
out.flush();

//接收客户端发送来的数据
Scanner scan=new Scanner(in);
while(true){
//读取客户端发送过来的一行数据并去掉空格
String sentStr=scan.nextLine().trim();
if(sentStr.equals("我吃了")){
out.write("你吃的什么".getBytes());
out.write(' ');
out.flush();
}else if(sentStr.equals("吃的包子")){
out.write("早餐还不错".getBytes());
out.write(' ');
out.flush();
}else{
out.write("你会不会聊天".getBytes());
out.write(' ');
out.flush();
break;
}
}
so.close();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


}

ClientDemo  :

package com.demo.client;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class ClientDemo {

public static void main(String[] args) {

try {
new ClientDemo().client();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
public void client() throws UnknownHostException, IOException{
Socket so=new Socket("localhost",800);
InputStream in=so.getInputStream();
OutputStream out=so.getOutputStream();

new Reader(out).start();
new Writer(in).start();
}

//读取控制台,往服务器端写
class Reader extends Thread{
private OutputStream out;

public Reader(OutputStream out) {
super();
this.out = out;
}

@Override
public void run() {
Scanner scan=new Scanner(System.in);
while(true){
String str=scan.nextLine().trim();
try {
out.write(str.getBytes());
out.write(' ');
out.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}



}

//读取服务器端发送来的数据
class Writer extends Thread{
private InputStream in;


public Writer(InputStream in) {
super();
this.in = in;
}


@Override
public void run() {
int x=0;
try {
while((x=in.read())!=-1){
System.out.write(x);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


}
}

原文地址:https://www.cnblogs.com/yang-32/p/5712784.html