基于TCP协议Socket通信

服务器线程处理类

package demo4;

import java.io.*;
import java.net.Socket; /**
* 服务器线程处理类
* @ClassName ServerThread
* @Author DiYun
* @Version 1.0
**/
public class ServerThread extends Thread { //和 本线程相关的Socket
Socket socket = null; public ServerThread(Socket socket) {
this.socket = socket;
} //线程执行的操作,响应客户端的请求
public void run() {
InputStream inputStream =null;
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
OutputStream outputStream = null;
PrintWriter printWriter = null; try {
//3.获取输入流 并读取客户端信息
inputStream = socket.getInputStream();//获取字节流
inputStreamReader = new InputStreamReader(inputStream); //读取字节流
bufferedReader = new BufferedReader(inputStreamReader);//为输入流添入缓冲
String info = null;
while ((info = bufferedReader.readLine()) != null) {
//循环读取客户端信息
System.out.println("我是服务器,客户端说:" + info);
} //关闭输入流
socket.shutdownInput(); //4.获取输出流,响应客户端的请求
outputStream = socket.getOutputStream(); //获取输出流,响应客户端的请求
printWriter = new PrintWriter(outputStream);
printWriter.write("欢迎您!");
printWriter.flush(); //调用flush方法将缓冲输出 } catch (IOException e) {
e.printStackTrace();
} finally {
try {
//5.关闭资源
if (printWriter !=null)
printWriter.close();
if(outputStream !=null)
outputStream.close();
if (bufferedReader !=null)
bufferedReader.close();
if(inputStreamReader !=null)
inputStreamReader.close();
if(inputStream !=null)
inputStream.close();
if(socket !=null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

服务器端代码

package demo4;

import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Arrays; /**
* 基于TCP 协议Socket 服务端
* @ClassName Server
* @Author DiYun
* @Version 1.0
**/
public class Server {
public static void main(String[] args) {
try {
//1.创建一个服务端Socket即ServerSocket 指定服务的端口并监听
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = null;
//记录客户端连接的数量
int count = 0;
System.out.println("服务端已经启动,等待客户端连接************************");
while (true) {
//2.调用accept()方法开始监听,等待客户端的连接
socket = serverSocket.accept();
//创建一个新的线程
ServerThread serverThread = new ServerThread(socket);
serverThread.start();
count++; //统计客户端的数量
System.out.println("客户端的数量" + count);
InetAddress inetAddress = socket.getInetAddress();
System.out.println("当前IP地址是:" + inetAddress.getHostAddress());
System.out.println("客户端信息:" + Arrays.toString(inetAddress.getAddress()));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

客户端

package demo4;

import java.io.*;
import java.net.Socket; /**
* 基于CTP 协议的 Socket 客户端
*
* @ClassName Client
* @Author DiYun
* @Version 1.0
**/
public class Client {
public static void main(String[] args) {
try {
//1.创建客户端 Socket 指定服务器地址和端口
Socket socket = new Socket("localhost", 8888);
//2.获取输出流,向服务端发送信息
OutputStream outputStream = socket.getOutputStream();
//将输出流包装为打印流
PrintWriter pw = new PrintWriter(outputStream);
pw.write("用户名:admin 密码: 12346");
pw.flush();
socket.shutdownOutput();//关闭输出流 //3.获取输出流 并读取服务端的响应信息
InputStream inputStream = socket.getInputStream();
//
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String info = null;
while ((info = bufferedReader.readLine()) != null) {
//循环读取客户端信息
System.out.println("我是客户端,服务端说:" + info);
} //4.关闭资源
bufferedReader.close();
inputStream.close(); pw.close();
outputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

注意,必须首先启动服务器再启动客户端

上一篇:Android 之 Socket 通信


下一篇:Android中Socket通信之TCP与UDP传输原理