Java--Socket通信(双向)
来源:互联网 发布:网络技术员厉害吗 编辑:程序博客网 时间:2024/05/22 20:28
原文地址:http://blog.csdn.net/zlqqhs/article/details/8757250
新建两个工程,一个客户端,一个服务端,先启动服务端再启动客户端
两个工程的读写操作线程类基本上完全相同
服务端:
- import java.io.BufferedReader;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.net.ServerSocket;
- import java.net.Socket;
- public class Server {
- public static final int PORT = 8000;//监听的端口号
- public static void main(String[] args) {
- Server server = new Server();
- server.init();
- }
- public void init() {
- ServerSocket serverSocket = null;
- try {
- serverSocket = new ServerSocket(PORT);
- while (true) {
- Socket client = serverSocket.accept();
- //一个客户端连接就开户两个线程处理读写
- new Thread(new ReadHandlerThread(client)).start();
- new Thread(new WriteHandlerThread(client)).start();
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally{
- try {
- if(serverSocket != null){
- serverSocket.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- /*
- *处理读操作的线程
- */
- class ReadHandlerThread implements Runnable{
- private Socket client;
- public ReadHandlerThread(Socket client) {
- this.client = client;
- }
- @Override
- public void run() {
- DataInputStream dis = null;
- try{
- while(true){
- //读取客户端数据
- dis = new DataInputStream(client.getInputStream());
- String reciver = dis.readUTF();
- System.out.println("客户端发过来的内容:" + reciver);
- }
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- try {
- if(dis != null){
- dis.close();
- }
- if(client != null){
- client = null;
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- /*
- * 处理写操作的线程
- */
- class WriteHandlerThread implements Runnable{
- private Socket client;
- public WriteHandlerThread(Socket client) {
- this.client = client;
- }
- @Override
- public void run() {
- DataOutputStream dos = null;
- BufferedReader br = null;
- try{
- while(true){
- //向客户端回复信息
- dos = new DataOutputStream(client.getOutputStream());
- System.out.print("请输入:\t");
- // 键盘录入
- br = new BufferedReader(new InputStreamReader(System.in));
- String send = br.readLine();
- //发送数据
- dos.writeUTF(send);
- }
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- try {
- if(dos != null){
- dos.close();
- }
- if(br != null){
- br.close();
- }
- if(client != null){
- client = null;
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
客户端:
- import java.io.BufferedReader;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.net.Socket;
- public class Client {
- public static final String IP = "localhost";//服务器地址
- public static final int PORT = 8000;//服务器端口号
- public static void main(String[] args) {
- handler();
- }
- private static void handler(){
- try {
- //实例化一个Socket,并指定服务器地址和端口
- Socket client = new Socket(IP, PORT);
- //开启两个线程,一个负责读,一个负责写
- new Thread(new ReadHandlerThread(client)).start();
- new Thread(new WriteHandlerThread(client)).start();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- /*
- *处理读操作的线程
- */
- class ReadHandlerThread implements Runnable{
- private Socket client;
- public ReadHandlerThread(Socket client) {
- this.client = client;
- }
- @Override
- public void run() {
- DataInputStream dis = null;
- try {
- while(true){
- //读取服务器端数据
- dis = new DataInputStream(client.getInputStream());
- String receive = dis.readUTF();
- System.out.println("服务器端返回过来的是: " + receive);
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally{
- try {
- if(dis != null){
- dis.close();
- }
- if(client != null){
- client = null;
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- /*
- * 处理写操作的线程
- */
- class WriteHandlerThread implements Runnable{
- private Socket client;
- public WriteHandlerThread(Socket client) {
- this.client = client;
- }
- @Override
- public void run() {
- DataOutputStream dos = null;
- BufferedReader br = null;
- try {
- while(true){
- //取得输出流
- dos = new DataOutputStream(client.getOutputStream());
- System.out.print("请输入: \t");
- //键盘录入
- br = new BufferedReader(new InputStreamReader(System.in));
- String send = br.readLine();
- //发送数据
- dos.writeUTF(send);
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally{
- try{
- if(dos != null){
- dos.close();
- }
- if(br != null){
- br.close();
- }
- if(client != null){
- client = null;
- }
- }catch(Exception e){
- e.printStackTrace();
- }
- }
- }
- }
0 0
- Java--Socket通信(双向)
- Java--Socket通信(双向)
- Java--Socket通信(双向)
- Java--Socket通信(双向,有界面)
- Socket通信(双向)
- java socket-1--通信(双向)
- Java--UDP通信(双向)
- JAVA SSL SOCKET通信服务器端客户端证书双向认证
- Java(socket通信)
- 双向的java socket
- Java Socket应用(一)--Socket通信
- Java--Socket通信(单向)
- Java Socket通信(多线程)
- java Socket通信(二)
- Java(扩展Socket通信)
- Java Socket 通信 (一)
- Java Socket 通信 (二)
- Java Socket 通信 (三)
- 数据倾斜总结
- c语言中二维数组的传递
- 【Unity Shaders】Transparency —— 使用渲染队列进行深度排序
- Struts学习笔记(1)---Action处理请求参数
- string的用法
- Java--Socket通信(双向)
- JS中使用EL表达式
- 性能测试之有效实施性能测试
- Acdeam 1007 快速幂+大数乘法
- Git的gc功能
- Linux装机利器Cobbler简述
- hdu 2717 Catch That Cow
- swift学习——关于断言
- 一种基于Qt的可伸缩的全异步C/S架构服务器实现(六) 整合各个模块实现功能