Socket编程
1.服务端
/**
* 基于TCP协议的Socket通信
*/
/**
* 服务端
* 1.创建ServerSocket对象,绑定监听端口
2.通过accept()方法监听客户端请求
3.连接建立后,通过输入流读取客户端发送的请求信息
4.通过输出流向客户端发送响应信息
5.关闭相关资源
*/
public class Server {
public static void main(String[] args) throws IOException {
//1、创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
ServerSocket serverSocket = new ServerSocket(5678); //1024-65535的某个端口
//2、调用accept()方法开始监听,等待客户端的连接
Socket socket = serverSocket.accept();
//3、获取输入流,并读取客户端信息
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String info =null;
while((info = br.readLine()) != null){
System.out.println("我是服务器,客户端说:" + info);
}
socket.shutdownInput();//关闭输入流
//4、获取输出流,响应客户端的请求
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("欢迎您!");
pw.flush();
//5、关闭资源
pw.close();
os.close();
br.close();
socket.close();
serverSocket.close();
}
}
2.客户端
/**
* 客户端
* 1.创建Socket对象,指明需要连接的服务器的地址和端口号
* 2.连接建立后,通过输出流向服务器端发送请求信息
* 3.通过输入流获取服务器响应的信息
* 4.关闭响应资源
*/
public class Client {
public static void main(String[] args) throws Exception {
//1、创建客户端Socket,指定服务器地址和端口
Socket socket = new Socket(InetAddress.getLocalHost(), 5678);
//2、获取输出流,向服务器端发送信息
PrintWriter pw = new PrintWriter(socket.getOutputStream());//将字节输出流包装成打印流
pw.write("用户名:admin;密码:123");
pw.flush();
socket.shutdownOutput();//关闭输出流
//3、获取输入流,并读取服务器端的响应信息
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String info = null;
while((info=br.readLine()) != null){
System.out.println("我是客户端,服务器说:" + info);
}
//4、关闭资源
br.close();
pw.close();
socket.close();
}
}
3.应用多线程实现服务器与多客户端之间的通信
/**
* 1.服务器端创建ServerSocket,循环调用accept()等待客户端连接
2.客户端创建一个socket并请求和服务器端连接
3.服务器端接受苦读段请求,创建socket与该客户建立专线连接
4.建立连接的两个socket在一个单独的线程上对话
5.服务器端继续等待新的连接
*/
public class Server2 {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(5678);
Socket socket = null;
int count = 0;//记录客户端的数量
while(true){
socket = serverSocket.accept();
ServerThread serverThread = new ServerThread(socket);
serverThread.start();
count++;
System.out.println("客户端连接的数量:" + count);
}
}
}
//服务器线程处理
public class ServerThread extends Thread{
//和本线程相关的socket
Socket socket = null;
public ServerThread(Socket socket){
this.socket = socket;
}
public void run(){
//服务器处理代码
}
}
http://www.cnblogs.com/rocomp/p/4790340.html
==============================================================================