Socket简单使用

//服务端程序

package com.socket.server;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SockServer {

public static void main(String[] args) {
    SockServer socketServer = new SockServer();
    socketServer.startServer();
}

public void startServer() {
    ServerSocket serverSocket = null;    //注意代码规范
    Socket socket = null;
    try {
        serverSocket = new ServerSocket(9999);   //创建socket实例,端口为9999
        System.out.println("server started..");//创建成功后输出创建成功
        while (true) {
            socket = serverSocket.accept();    //while无限循环来等待客户端接入  
            manageConnection(socket);          //serversocket用来等待客户端接入,返回一个socket实例,用来操作socket里面的数据
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            socket.close();    //操作后关闭socket
            serverSocket.close();//操作后关闭serversocket
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public void manageConnection(final Socket socket) {   //匿名类使用传参数只能传入final或者全局变量
    new Thread(new Runnable() {
        @Override
        public void run() {
            BufferedReader reader = null;    //读取socket里面的数据
            BufferedWriter writer =null;     //向socket里面写入数据
            try {
                System.out.println("client " + socket.hashCode() + " connedted");
                reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));    //getInputStream返回一个字符流
                writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));   //getInputStream返回一个输入流
                String receivedMsg;
                while ((receivedMsg = reader.readLine()) != null) {//读取socket数据
                    System.out.println("client " + socket.hashCode() + ": " + receivedMsg);
                    writer.write("server reply: " + receivedMsg + "\n");
                    writer.flush();   //在客户端接收时,注意发送时加换行符,接收是以换行为结束标志
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    reader.close();
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }).start();
}

}

//客户端程序

package com.socket.client;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class SocketClient {

public static void main(String[] args) {
    SocketClient client = new SocketClient();
    client.start();
}

public void start() {
    BufferedReader inputReader = null;
    BufferedReader reader = null;
    BufferedWriter writer = null;
    Socket socket = null;
    try {
        socket = new Socket("127.0.0.1", 9898);
        reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        inputReader = new BufferedReader(new InputStreamReader(System.in));//监听键盘输入内容
        startServerReplyListener(reader);
        String inputContent;
        int count = 0;
        while (!(inputContent = inputReader.readLine()).equals("bye")) {
            writer.write(inputContent);
            if (count % 2 ==0) {
                writer.write("\n");
            }
            count++;
            writer.flush();
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            reader.close();
            writer.close();
            inputReader.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public void startServerReplyListener(final BufferedReader reader) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                String response;
                while ((response = reader.readLine()) != null) {
                    System.out.println(response);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值