一、客户端的程序(没用线程,本来想建的,但又觉得麻烦,我是个懒人)
package day133;
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
// 发送消息
Socket socket = null;
PrintStream ps = null;
BufferedReader br = null;
BufferedReader br2 = null;
try {
socket = new Socket("127.0.0.1", 5001);
ps= new PrintStream(socket.getOutputStream());//流与套接字之间建立联系
br = new BufferedReader(new InputStreamReader(System.in));// 从控制台输入要发送到服务器端的消息
br2 = new BufferedReader(new InputStreamReader(socket .getInputStream()));//从服务器端接收到的消息
while (true) { //一直循环,一直到从客户端输入quit为止
String string = br.readLine();
ps.println(string); // 向服务器中发送消息
ps.flush();
if (string.trim().equals("quit"))// 退出
{
break;
}
// 从服务器端得到消息
String serverString = br2.readLine();
System.out.println("服务器:" + serverString);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
ps.close();
try {
br1.close();
br2.close();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
}
二、服务器端的程序(用了线程)
/************************运行的主函数*********************/
package day133;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
/**
* @服务器端程序
*/
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(5001);
socket = serverSocket.accept();
// 放在一个线程中
new ServerThread(socket).start();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/****************ServerThread**********************/
package day133;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class ServerThread extends Thread {
// 对一些东西的初始化放在构造函数中
// 放什么呢,读取文件的东西Buffered
BufferedReader bReader = null;// 读取信息
BufferedReader bReader1 = null;
PrintStream ps = null;
Socket socket = null;
public ServerThread(Socket socket) {
this.socket = socket;
try {
bReader = new BufferedReader(new InputStreamReader(socket
.getInputStream()));// 读信息
bReader1 = new BufferedReader(new InputStreamReader(System.in));
ps = new PrintStream(socket.getOutputStream());// 向客户端输出信息
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
try {
while (true) {
String info = bReader.readLine();
// 从服务器端接收的消息
if (info.equals("")) {
System.out.println("用户没有说话");
} else {
if (info.trim().equals("quit")) {
System.out.println("用户退出连接");
break;
}
System.out.println("用户说: " + info);
}
// 发送到服务器端的消息
String serverInfo = bReader1.readLine();
ps.println(serverInfo);
if (!serverInfo.trim().equals("")) {
if (serverInfo.trim().equals("quit")) {
break;
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
ps.close();
try {
bReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
注意:这个程序只能客户端先运行,而且只能打一行,然后切换到服务器端运行,否者会出错。