Socket编程

Socket编程
通信需要的是Ip和端口;
在java中,网络通讯就叫socket通讯;

1.服务端socket
a.首先要启动一个socket服务端,本质上就是向操作系统注册一个端口号,并且监听这个端口上的消息: ServerSocket ss=new ServerSocket(10000)
//端口号不能超过65535,并且tomcat一般占用8080的端口号
//以上只是在启动一个端口,现在要建立一个连接,即等待用户的连接,谁连接的,那么接收以及发送的消息就是针对谁的;
b.Socket sc = ss.accept();
//这个accept方法是个阻塞方法,没有人请求就会一直等待,直到有人请求;阻塞方法的好处是,试想下,如果这个方法不是阻塞连接,那么可能还没有接到请求就会往下运行,等于什么东西都接收不到;
c.已经收到了客户端的请求,就可以收取消息了,其实和我们平时读消息的道理是一样的,只是这次是从连接中取数据,而不是从磁盘文件上取数据;所以需要先获得一个输入流工具,用于读取数据;
InputStream in = sc.getInputStream();

d.接下来的操作与读文件是一样的:
//从输入流中拿数据;与FileInputStream是一样的;
int read = in.read()//一次只拿一个字节;如果对方发的是a,那么接收到的int就是97;
char x = (char)read;
//如果发的是英文或者数字,可以用char强转;当然,这只是一种假设,具体发什么用什么来解码与软件内部协议有关

//也可以一次读多个字节;
byte[] b = new byte[1024];
int num = in.read(b);
//int返回的是实际读了几个字节;这种方式读取会将读取到的字节都存入字节数组
然后用String的方法将这几个字节转换一下:
//注意:如果第二次还要读数据,就不用在创建一个数组和num变量了,因为read的方法会从0开始覆盖上一个byte[];

另外,read()实际上也是一种阻塞方法,如果一直没有数据读出来,也会一直停留,直到有数据拿出来;这是好处,也是问题:如果已建立连接的这个用户一直没有输出数据,那么服务端就会一直阻塞在这里,那么下一个用户就要一直等待,直到这次线程结束,进入下一次while循环才可以;如果用户接连输出了两次,而服务端只接收了一次,那么这一次会将客户端的两次一次性接收;

new String(b,0,num);意思是将b数组从下标0开始,长度num的字节转换为字符串;

注意,写完后一定要关流,关连接;

2.客户端socket

a.客户端就只需要向服务端发出建立连接的需求,写法如下:
Socket ss = new Socket(“192.168.10.159”,10000);
//括号内填申请连接的服务端ip地址和端口,地址是字符串;如果是本机,也可以填LocalHost;

b.从连接中拿到一个发数据的工具;
OutputStream so = ss.getOutputStream();

c.利用输出流发消息;基本与FileOutputStream一致;
so.write();这个里面只能写int或者字节和字节数组,可以利用String的getBytes方法;
so.write(“你好”.getBytes());

写完后要关掉连接和流;

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值