java Socket笔记


java Socket笔记


上图:

socket流程示意图

首先,在服务端,要有一个

ServerSocket serverSocket = new ServerSocket(12345);

端口随便整,尽量大点,不要和系统用的冲突了就行。
要获取socket对象(获取之后可以加入到容器中,方便管理)

Socket acceptSocket = serverSocket.accept();

另外开一个线程,运行accepet()这个阻塞方法,等待socket的连接。
监听从socket客户端传来的消息

这些socket都是没有标识符的,所以如果要区分是谁发的,发给谁的,个人认为应该让客户端传来类似json的消息,加以标识。

因为每一个socket对象都是长时间监听,所以也都开一个线程(直观点看成一个USER),专门监听。
这时候就要把socket对象作为成员变量包装进USER。

服务器端则添加一个USER的容器放置。

在USER线程的run方法中,可以这样子写,来接收消息:

public void run() {
    try {
        BufferedReader bufferReader = new BufferedReader(
                new InputStreamReader(socket.getInputStream(), "utf-8"));
        String line = null;
        while ((line = bufferReader.readLine()) != null) {
            //statement;
        }
        bufferReader.close();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

输出消息:

// 输出消息
public void out(String out) {
    try {
        writer = new BufferedWriter(new OutputStreamWriter(
                socket.getOutputStream(), "UTF-8"));
        writer.write(out + "\n");
        writer.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

这仅仅是服务器端的写法,并且只能传文字,如果要传图片,个人认为要加上http通信,将文件传到服务器端,再在socket发送的消息中添加一个图片URL。

客户端的写法和服务端的写法是差不多的。

要注意,一个socketClient和另一个socketClient并不是直接通信,而是经过
1 我方输出
2 服务器输入
3 服务器输出
4 对方接收
这四个过程

当然也可以通过server建立连接之后,两个client直接建立socket连接。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值