Socket实现client和server端通信(Java)(转)

转自: https://blog.csdn.net/yayun0516/article/details/50819147

https://www.jianshu.com/p/2d4f223f1462

socket字面意思为插座,打个比喻,当两台电脑需要通讯时,每一台电脑准备好一个网线插口,插上网线,连接成功。同理,当两台计算机应用程序需要连接时,也需要像电脑一样准备好一个网线插口,这个东西在操作系统中叫做socket(套接字),它包含三个概念:(protocol + ip + port)。

概念形象化

socket:火车站
protocol:高铁 动车 特快 普快 绿皮 货运 蒸汽机车
ip:目的地站名
port:站内出站口

这里我们主要实现一下socket通信,socket通信在java中应用十分广泛。比如QQ和MSN等都是基于socket通信的,什么是socket?简单理解socket就是ip+端口。通过实例来观察一下最简单的socket通信是怎么实现的吧。

首先实现server端代码:

package com.socket.demo;
 
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Server {
    public static void main(String[] args) {
        try{
            ServerSocket serverSocket=new ServerSocket(8888);
            System.out.println("----------------服务端执行,開始监听请求----------------");
            Socket socket=serverSocket.accept();//開始监听
            InputStream inputStream=socket.getInputStream();
            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
            //获取请求内容
            String info;
            while ((info=bufferedReader.readLine())!=null) {
                System.out.println("我是server端,client请求为:"+info);
                
            }
            //关闭资源
            socket.shutdownInput();
            bufferedReader.close();
            inputStream.close();
            socket.close();
            serverSocket.close();
            }catch(Exception exception){
                
            }
 
    }
    
}

然后实现client代码:

 

package com.socket.demo;
 
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
 
public class Client {
    public static void main(String[] args) {
        try {
            //发送到8888端口
            Socket socket=new Socket("127.0.0.1", 8888);
            //输出流
            OutputStream outputStream=socket.getOutputStream();
            PrintWriter printWriter=new PrintWriter(outputStream);
            printWriter.write("server端你好,我是client。");
            printWriter.flush();
            //关闭资源
            printWriter.close();
            outputStream.close();
            socket.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    
    
 
}

结构如图:

然后我们首先运行服务器端:(顺序不能颠倒哦)

然后启动客户端:

这里可以看到,客户端将信息发送到服务器端,服务器端接收到信息后将信息在控制台进行输出。好了,最简单的一个socket通信就实现了。

总结一下如下图:

 

 

一些函数:

TTransport transport = new TSocket(ip,port) 传的就是ip地址和端口号

posted on 2019-09-12 17:12  吱吱了了  阅读(7143)  评论(0编辑  收藏  举报

导航