用Java编写一个服务器端的程序Server.java,该程序在8000端口监听客户端的请求,如果与客户端连接后,收到客户端发送的数据不是字符串“bye”,则在服务器端打印客户端发来的数据,并向客户端回送一条从键盘输入的信息,若客户端发来的数据是字符串“bye”,则关闭服务器端程序。
(有朋友说,这个之前写的有问题,然后我就再来一次,冲!冲!冲!)
服务端:
package longyuanke;
//服务端代码
import java.io.DataInputStream;
import java.io.DataOutputStream;
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 ServerThread {
public static void main(String[] args) {
System.out.println("运行中……");
try{
ServerSocket serversocket = new ServerSocket(9612);
System.out.println("服务器等待连接");
Socket socket = serversocket.accept();
// 设置服务器监听的端口
ReceiveClient(socket);
SendClient(socket);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void ReceiveClient(Socket socket) {
new Thread() {
@Override
public void run() {
try (
InputStream ins = socket.getInputStream();
DataInputStream dins = new DataInputStream(ins);
){
while (true) {
String msg = dins.readUTF();
System.out.println("接受客户端的信息:"+msg);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}
private static void SendClient(Socket socket) {
new Thread() {
@Override
public void run() {
//synchronized (socket) {
try (OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
Scanner scann = new Scanner(System.in);) {
while (true) {
String msg = scann.nextLine();
dos.writeUTF(msg);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//}
}
}.start();
}
}
客户端:
package longyuanke;
// 客户端代码
import java.io.DataInputStream;
import java.io.DataOutputStream;
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 ClientThread {
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
Socket socket = new Socket("127.0.0.1",9612);
SendServer(socket);
ReceiveServer(socket);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void SendServer(Socket socket) {
new Thread() {
@Override
public void run() {
//synchronized (socket) {
try (OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
Scanner scann = new Scanner(System.in);) {
while (true) {
String msg = scann.nextLine();
dos.writeUTF(msg);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//}
}.start();
}
private static void ReceiveServer(Socket socket) {
new Thread() {
@Override
public void run() {
synchronized (socket) {
try (InputStream ins = socket.getInputStream(); DataInputStream dins = new DataInputStream(ins);) {
while (true) {
//System.out.println("从服务器收到的信息:");
String msg = dins.readUTF();
System.out.println("从服务器收到的信息:"+msg);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}.start();
}
}
演示结果如下: