网络编程Socket

网络的一些名词

ip地址:唯一标识一个电脑的

ip是4个字节组成的例如:xx.xx.xx.xx,每一个xx是一个字节范围就是0到255

| 0255 | 0255 | 0255 | 0255 |

ip地址的组成是:网络地址+主机地址

有A类,B类CDE。。。

例如:192.168.16.1前面三个就是你的网络地址,后面一个就是你的主机标识

域名:把ip地址变成为www.xxx.com

端口号:是在一个主机的里面确定,是哪一个软件

范围是065535 ,01024已经被占用了

网络通信协议:TPC/IP协议

这个简单描述一下类似于数据打包

你准备好了数据,包装好了发过去别人收到包装好的数据然后拆开包装得到数据

TPC协议:比较可靠通过三次握手,但每次传输要关闭资源效率低

UDP协议:类似于广播,我发出去就好了收不收随便你

TCP的Socket

这里是服务端

package one;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
public class Server {
    public static void main(String[] args) throws IOException {
        //创建一个9999的端口,在本机地址上面
        ServerSocket serverSocket = new ServerSocket(9999);
        //等待链接,一直会阻塞到这里相当于激活端口。
        Socket accept = serverSocket.accept();
        //拿到客户端的数据
        InputStream inputStream = accept.getInputStream();
        byte b [] = new byte[1024];
        int n ;
        while ((n = inputStream.read(b))!=-1){
            System.out.print(new String(b,0,n));
        }
        //给我们的客户端响应一下
        OutputStream outputStream = accept.getOutputStream();
        outputStream.write("HI,hi".getBytes(StandardCharsets.UTF_8));
        //ps:这里要设置一个结束标注不然两个主机都不会退出
        accept.shutdownOutput();
        inputStream.close();
        outputStream.close();
        serverSocket.close();
        accept.close();
    }
}

这里是客户端

package one;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
public class Cilen {
    public static void main(String[] args) throws IOException {
        //这个是链接本机地址的9999端口。
        Socket socket = new Socket("127.0.0.1",9999);
        //这里面是发一个HI给那个端口
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("HI".getBytes(StandardCharsets.UTF_8));
        socket.shutdownOutput();
        //接收我们的服务端发的数据
        InputStream inputStream = socket.getInputStream();
        byte b [] = new byte[1024];
        int n ;
        while ((n = inputStream.read(b))!=-1){
            System.out.print(new String(b,0,n));
        }
        inputStream.close();
        outputStream.close();
        socket.close();
    }
}
#网络编程#
全部评论
socket功能要更强大吧
点赞 回复 分享
发布于 2022-08-20 23:22 陕西

相关推荐

回暖了回暖了,大家都给我回暖这几天天气回暖了,今天穿个外套坐地铁差点给我·热死我分享一下这几天总结的嵌入式面经1. 在SPI通信中,时钟极性和时钟相位的设置对数据传输有何影响?2. CAN总线的基本结构和工作原理是什么?如何进行数据发送和接收?3. 操作系统中的进程和线程有什么区别?它们的调度策略有何不同?4. 任务优先级反转是什么?如何通过调度算法来解决这个问题?5. 信号量和互斥量的区别是什么?在多线程编程中如何使用它们?6. 什么是活锁?与死锁相比,它有什么不同的表现?7. 如何通过资源分配图来检测死锁?这种方法的局限性是什么?8. 互斥锁的实现方式有哪些?请举例说明其优缺点。9. 在FreeRTOS中,如何实现任务间的通信?有哪些常用的方法?10. ARM Cortex-M系列处理器的中断控制机制是怎样的?如何配置优先级?11. C语言的预处理阶段主要做什么?常用的预处理指令有哪些?12. ELF文件格式的基本结构是什么?各个部分的作用是什么?13. 静态变量和动态变量的存储位置及生命周期有什么不同?14. 你是否有MQTT协议的使用经验?请简要描述其工作原理。15. HTTP协议和HTTPS协议的主要区别是什么?在什么情况下选择使用HTTPS?16. DHCP协议的工作流程是怎样的?它如何分配IP地址?17. TCP的三次握手和四次挥手过程是什么?为什么需要这些步骤?18. IPv4和IPv6的主要区别是什么?IPv6的优势在哪里?19. ARP缓存的作用是什么?如何管理ARP缓存?20. 在局域网中,如何选择合适的交换机类型以满足网络需求?21. M4内核的特权级别如何划分?不同特权级别的使用场景是什么?22. 如何实现用户态和内核态之间的切换?涉及哪些系统调用?问题答案已经整理到专栏中了,关注我分享更多知识。  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
点赞 评论 收藏
分享
评论
1
2
分享
牛客网
牛客企业服务