TCP socket 简单实现
2017-03-20 00:39
281 查看
client:
import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.Reader; import java.net.Socket; import java.net.SocketException; import java.net.UnknownHostException; import java.nio.CharBuffer; import java.util.Timer; import java.util.TimerTask; public class Client { private String host = "127.0.0.1"; private int port = 8888; private boolean isRecevice = false; /** * 数据发送线程 */ class SendThread implements Runnable { private Socket socket; public SendThread(Socket socket) { this.socket = socket; } public void run() { while (true) { try { send(socket); Thread.sleep(2000); } catch (Exception e) { e.printStackTrace(); } } } } class MyThread implements Runnable { private Socket socket; public MyThread(Socket socket) { this.socket = socket; } public void run() { try { // socket.setKeepAlive(true); // socket.setSoTimeout(10); while (true) { socket.sendUrgentData(0xFF); // 发送心跳包 System.out.println("目前是处于链接状态!"); Thread.sleep(3 * 1000);// 线程睡眠3秒 } } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } /** * 数据接收线程 */ class ReceiveThread extends Thread { private Socket socket; public ReceiveThread(Socket socket) { this.socket = socket; socket.isConnected(); } public void run() { while (true) { try { recevice(socket); } catch (IOException e) { e.printStackTrace(); } } } } public Socket connect() throws UnknownHostException, IOException { Socket socket = new Socket(host, port);// 创建Socket return socket; } private void start() { try { Socket socket = connect(); // new Thread(new SendThread(socket)).start();// 启动读线程 // new Thread(new MyThread(socket)).start(); ReceiveThread thread = new ReceiveThread(socket); thread.start();// 启动收线程 } catch (Exception e) { System.out.println("连接错误"); e.printStackTrace(); } // 定时器 Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { if (!isRecevice) { try { connect(); } catch (UnknownHostException e) { System.out.println("host 错误"); e.printStackTrace(); } catch (IOException e) { System.out.println("io操作错误"); e.printStackTrace(); } } } }, 12000);// 设定指定的时间time,此处为2000毫秒 } public void send(Socket socket) throws IOException { PrintWriter pw = new PrintWriter(new OutputStreamWriter( socket.getOutputStream())); pw.write("this is client"); pw.flush(); } public void recevice(Socket socket) throws IOException { Reader reader = new InputStreamReader(socket.getInputStream()); CharBuffer charBuffer = CharBuffer.allocate(8192); int charIndex = -1; while ((charIndex = reader.read(charBuffer)) != -1) { isRecevice = true; send(socket); charBuffer.flip(); System.out.println("client--> " + charBuffer.toString()); } } public static void main(String[] args) { new Client().start(); } }
server:
import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; import java.net.ServerSocket; import java.net.Socket; import java.nio.CharBuffer; public class Server { private ServerSocket serverSocket; private Socket socket; private int port = 5055; private void start() throws Exception { serverSocket = new ServerSocket(port); while (true) { socket = serverSocket.accept(); new Thread(new SocketThread(socket)).start();// 多线程阻塞 } } /** * 处理socket连接s */ class SocketThread implements Runnable { private Socket socket; private String temp = ""; public SocketThread(Socket socket) { this.socket = socket; } public void run() { try { Reader reader = new InputStreamReader(socket.getInputStream()); Writer writer = new OutputStreamWriter(socket.getOutputStream()); CharBuffer charBuffer = CharBuffer.allocate(1024); int readIndex = -1; while ((readIndex = reader.read(charBuffer)) != -1) { charBuffer.flip(); temp += charBuffer.toString(); System.out.println("server-->" + temp); writer.write("this is server"); writer.flush(); } } catch (IOException e) { e.printStackTrace(); } finally { if (socket != null) { if (!socket.isClosed()) { try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } } public static void main(String[] args) { Server s = new Server(); try { s.start(); } catch (Exception e) { e.printStackTrace(); } } }
相关文章推荐
- 利用Tcp和socket实现的客户端与服务端的简单通信
- socket 编程 TCP 实现简单聊天功能
- java实现一个简单TCPSocket聊天室功能分享
- Java 基于TCP/IP 实现简单的 socket 通信
- Linux C TCP Socket实现客户与服务器简单通信
- C++ 简单的 Tcp 实现[socket] 客户端与客户端通信
- 【原创】TCP Socket 简单练习 --- 线程池实现并发服务器
- 基于tcp的c/s模型的一个简单的socket实现
- 简单实现基于TCP的Socket多线程通信
- Linux C TCP Socket实现客户与服务器简单通信
- Socket TCP 简单聊天的实现
- python socket编程实现的简单tcp迭代server
- 【转】 C++ 简单的 Tcp 实现[socket] 客户端与客户端通信
- C++ 简单的 Tcp 实现[socket] 服务器端与客户端通信
- linux下socket实现TCP通信的简单程序接口封装
- C++ 简单的 Tcp 实现[socket] 客户端与客户端通信
- 基于TCP的项目学习历程(一)实现简单的socket请求。瞎扯的,不要评论。
- TCP与UDP的简单发送与实现(socket)
- Linux C TCPSocket 传输文件简单实例-多线程实现
- python socket实现简单的(TCP/UDP)服务器/客户端