网络编程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. 除了java别的语言用过吗?2. 计算机专业课哪些课学的比较好?3. FTP协议4. 做一个FTP server你会怎么做5. 你的FTP怎么做重传?是个什么结构?6. 你的FTP如何接收和处理请求呢?(说的http请求地址,后端处理请求。面试官说那是http,FTP怎么做?不会,道歉)7. 网络通信做的时候要考虑什么?(说的安全性和可靠性,重传、控制那些)8. 有没有用FTP或者TCP协议做过一些网络通信,客户端或者服务端?9. websocket的服务端是通过什么手段通知到商家?10. 这个web socket是谁创建的?11. websocket和http区别?12. 能不能用UDP实现TCP的可靠通信?(说了QUIC协议,被打断说你会怎么做?答了重传和流量控制)13. 所以说你超声重传就是发送一个包,然后看对方有没有回是吧,回来的话再发下一个包是吧?(我应该不是这么说的,但是脑子很乱,说这样会导致队头阻塞问题)14. 继续上一个,队头阻塞你会怎么做?(回答后续的包不需要等第一个包,直接进行处理)15. 继续上一个,那你说的队头阻塞是什么呢?这种就是解决办法吗?(脑子越来越乱)16. 继续上一个,队头阻塞你会怎么做?(道歉,我说请教一下,面试官说下去自己查吧)17. 设计一个扫描器,去探测网络上有多少个服务器,它开放了什么功能,那你觉得这个扫描器是怎么做的?(说的发请求看有没有响应,然后道歉)18. 如何发请求?(postman?)19. 那postman发的什么请求?(已经不知道在问什么了,说的http请求?)20. 怎么优化浏览器访问网页的过程?21. 服务端是什么呢?你说有上锁体验比较差,有什么办法解决吗?22. 缓存为什么可以加快速度呢?23. 除了DNS缓存,还有什么缓存?(说的浏览器缓存)24. 浏览器缓存怎么工作呢?25. 你请求一个页面的时候,你会去缓存里面去看吗?(不了解)26. 回到缓存的本质来说,我们会怎么用?(回答redis)27. 要实现一个保存网页的缓存的数据结构,你会用什么结构?(回答map)28. 缓存还有没有什么要考虑的?(ttl,以及缓存淘汰)29. 怎么淘汰呢?(惰性、定期、延迟队列、定时)30. 定期是怎么去删的呢?31. 定期有的时候是不是也会存在一些问题?(不知道)32. 进程间通信有哪些方式?(OS不会)33. 实现一个队列怎么实现,是一个什么数据结构?34. 用数组能不能实现?35. ES里面的数据它是怎么做快速查找,原理是什么?36. ES怎么建立索引,用什么数据结构?(前缀树?)5.19一面一直没反应,5.25公众号留言更新为复试状态,5.27邮件催进度,5.28回复并约下午面30min,这时候已经感觉不对了。不开摄像头+一直道歉+无反问手撕=秒挂。有没有会的bro回答一下面试问题,让我学一学
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务