以客户端为主,来思考client.getOutputStream和client.getInputStream,就可以知道那个是输入,那个是输出,同时要知道只有PrintStream是用来在客户端和服务器端交互信息的流;
------------------------------------
服务器端:
-------------------------------------
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.ServerSocket;
public class HelloServer {
public static void main(String[] args) throws Exception{
ServerSocket server = new ServerSocket(8888);//在8888端口上开启服务
Socket client = null;//表示连接的客户端
System.out.println("等待客户端连接。。。。。。");
client = server.accept();//接受客户端的连接
OutputStream out = client.getOutputStream(); //得到客户端输出流
PrintStream pout = new PrintStream(out);
pout.println("Hello World!!!");
pout.close();
out.close();
client.close();
server.close();
}
}
--------------------------------------
客户端:
--------------------------------------
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
public class HelloClient {
public static void main(String[] args) throws Exception{
Socket client = new Socket("localhost",8888);
BufferedReader buf = null;
buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = buf.readLine();
System.out.println("内容是:" + str);
client.close();
}
}
--------------------------------------
服务器端(循环等待):
--------------------------------------
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServer {
public static void main(String[] args) throws Exception{
ServerSocket server = new ServerSocket(8888);//在8888端口上开启服务
Socket client = null;//表示连接的客户端
boolean flag = true;
while(flag){
System.out.println("等待客户端连接。。。。。。");
client = server.accept();//接受客户端的连接
BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream())); //得到客户端输入流
PrintStream pout = new PrintStream(client.getOutputStream());//得到客户端输出流
boolean temp = true;
while(temp){ //循环接收用户输入的内容并回应
String str = buf.readLine();
if(str==null||"".equals(str)){
temp = false;
break;
}
if("bye".equals(str)){
temp = false;
break;
}
pout.println("ECHO:" + str); //回送信息
}
pout.close();
client.close();
}
server.close();
}
}
-----------------------------------------
客户端(循环操作):
-----------------------------------------
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class EchoClient {
public static void main(String[] args) throws Exception{
Socket client = new Socket("localhost",8888);
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
BufferedReader buf = null;
buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintStream out = new PrintStream(client.getOutputStream());
boolean flag = true;
while(flag){
System.out.print("请输入要发送的内容:");
String str = input.readLine();
if(str == null||"".equals(str)){
flag = false;
break;
}
if("bye".equals(str)){
flag = false;
break;
}
out.println(str);
System.out.println(buf.readLine());
}
client.close();
}
}
-------------------------------------------
(实现服务器端的多线程)多线程执行的代码:
-------------------------------------------
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class EchoThread implements Runnable {
private Socket client;
public EchoThread(Socket client){
this.client = client;
}
@Override
public void run() {
// TODO Auto-generated method stub
try{
BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream())); //得到客户端输出流
PrintStream pout = new PrintStream(client.getOutputStream());
boolean temp = true;
while(temp){ //循环接收用户输入的内容并回应
String str = buf.readLine();
if(str==null||"".equals(str)){
temp = false;
break;
}
if("bye".equals(str)){
temp = false;
break;
}
pout.println("ECHO:" + str); //回送信息
}
pout.close();
client.close();
}catch(Exception e){
}
}
}
--------------------------------------
服务器端代码:
--------------------------------------
import java.net.ServerSocket;
public class EchoThreadServer {
public static void main(String[] args) throws Exception{
ServerSocket server = new ServerSocket(8888);//在8888端口上开启服务
boolean flag = true;
while(flag){
System.out.println("等待客户端连接。。。。。。");
new Thread(new EchoThread(server.accept())).start();
}
server.close();
}
}
-------------------------------------