JAVA笔记26-网络编程(不等于网站编程)

news/2024/5/20 17:09:22/文章来源:https://blog.csdn.net/weixin_30338497/article/details/95524086

一、网络基础(TCP/IP详解)

 

1、IP协议(Internet Protocol):网络层,支持网间数据报通信。无连接数据报传送,数据报路由选择和差错控制。

IPv4 32位(4字节),IPv6 128位(16字节)。P

ping ICMP协议

2、TCP协议、UDP协议

(1)TCP(transmission control protocol 打电话):专门设计用于在不可靠的因特网上提供可靠的、端到端的字节流通信的协议。它是一种面向连接的协议。有三次握手。慢

(2)UDP(user data protocol 寄信):提供了一种发送封装的原始IP数据报的方法、并且发送时无需建立连接,是一种不可靠的连接。快

二、Socket

两个Java应用程序可以通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket。

Socket通常用来实现client-server连接。

java.net包中定义的两个类Socket和ServerSocket,分别用来实现双向连接(TCP连接)的client和server端。

建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port number)。端口号2字节,可以区分不同的应用程序。端口号又分TCP端口和UDP端口,每个都是65536个端口。

例如:

收邮件 POP3 110

STMP 25

FTP 21

HTTP 80

1、TCP Socket通信模型

这只是练习,实际上的网络编程都是异步式的。System.in,accept(),readUTF()都是阻塞式的(非重点)

例1

import java.net.*;
import java.io.*;
public class TCPServer{public static void main(String args[]) throws Exception{ServerSocket ss = new ServerSocket(6666);//端口号6666while(true){Socket s = ss.accept();System.out.println("a client connect!");DataInputStream dis = new DataInputStream(s.getInputStream());System.out.println(dis.readUTF());dis.close();s.close();}}
}
import java.net.*;
import java.io.*;
public class TCPClient{public static void main(String args[]) throws Exception{Socket s = new Socket("127.0.0.1",6666);OutputStream os = s.getOutputStream();DataOutputStream dos = new DataOutputStream(os);dos.writeUTF("hello server!");dos.flush();dos.close();s.close();}
}

 例2

import java.io.*;
import java.net.*;
public class TestServer{public static void main(String[] args){try{ServerSocket s = new ServerSocket(8888);//服务器端口号8888while(true){Socket s1 = s.accept();OutputStream os = s1.getOutputStream();DataOutputStream dos = new DataOutputStream(os);dos.writeUTF("Hello,"+s1.getInetAddress()+"port#"+s1.getPort()+" byebye!");//客户端的IP地址和端口号
                dos.close();s1.close();}}catch(IOException e){e.printStackTrace();}}
}
import java.net.*;
import java.io.*;
public class TestClient{public static void main(String[] args){try{Socket s1 = new Socket("127.0.0.1",8888);//服务器地址和端口号InputStream is = s1.getInputStream();DataInputStream dis = new DataInputStream(is);System.out.println(dis.readUTF());dis.close();s1.close();}catch(ConnectException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();}}
}

例3

 

import java.io.*;
import java.net.*;
public class TestServer{public static void main(String[] args){InputStream in = null;OutputStream out = null;try{ServerSocket ss = new ServerSocket(5888);//设置端口号Socket s1 = ss.accept();in = s1.getInputStream();out = s1.getOutputStream();DataOutputStream dos = new DataOutputStream(out);DataInputStream dis = new DataInputStream(in);String s = null;if((s=dis.readUTF())!=null){System.out.println(s);System.out.println("from: "+s1.getInetAddress());System.out.println("Port: "+s1.getPort());}dos.writeUTF("hi,hello");dis.close();dos.close();s1.close();}catch(IOException e){e.printStackTrace();}}
}
import java.net.*;
import java.io.*;
public class TestClient{public static void main(String[] args){InputStream in = null;OutputStream out = null;try{Socket s1 = new Socket("localhost",5888);//服务器地址和端口号in = s1.getInputStream();out = s1.getOutputStream();DataInputStream dis = new DataInputStream(in);DataOutputStream dos = new DataOutputStream(out);dos.writeUTF("hey");String s = null;if((s=dis.readUTF())!=null){System.out.println(s);    }dos.close();dis.close();s1.close();}catch(UnknownHostException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();}}
}

 练习4:(by myself)

import java.io.*;
import java.net.*;
public class TestServer{public static void main(String[] args){InputStream in = null;OutputStream out = null;String si = null;String so = "";try{ServerSocket ss = new ServerSocket(5888);//设置端口号while(true){Socket s1 = ss.accept();in = s1.getInputStream();//接收数据out = s1.getOutputStream();//发送数据DataInputStream dis = new DataInputStream(in);DataOutputStream dos = new DataOutputStream(out);//从键盘读入InputStreamReader isr2 = new InputStreamReader(System.in);BufferedReader br2 = new BufferedReader(isr2);while(!so.equals("exit")){if((so=br2.readLine())!=null&&!so.equals("exit")){System.out.println("Server:"+so);dos.writeUTF(so);}if((si=dis.readUTF())!=null){System.out.println("Client:"+si);    }    }    dis.close();br2.close();dos.close();s1.close();}}catch(IOException e){e.printStackTrace();}}
}
import java.net.*;
import java.io.*;
public class TestClient{public static void main(String[] args){InputStream in = null;OutputStream out = null;String si = null;String so= "";try{Socket s1 = new Socket("127.0.0.1",5888);//服务器地址和端口号in = s1.getInputStream();//接收out = s1.getOutputStream();//发送DataInputStream dis = new DataInputStream(in);DataOutputStream dos = new DataOutputStream(out);//从键盘读入InputStreamReader isr2 = new InputStreamReader(System.in);BufferedReader br2 = new BufferedReader(isr2); while(!so.equals("exit")){if((si=dis.readUTF())!=null){System.out.println("Server:"+si);    }    if((so=br2.readLine())!=null&&!so.equals("exit")){System.out.println("Client:"+so);dos.writeUTF(so);}}        dis.close();br2.close();dos.close();s1.close();}catch(UnknownHostException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();}}
}

 2、UDP Socket通信模型

没有server,client的概念,不区分两者的socket。receive()方法也是阻塞式的。

例1

import java.net.*;
public class TestUDPServer{public static void main(String args[]) throws Exception{byte buf[] = new byte[1024];DatagramPacket dp = new DatagramPacket(buf, buf.length);DatagramSocket ds = new DatagramSocket(5678);while(true){ds.receive(dp);System.out.println(new String(buf, 0, dp.getLength()));}}
}
import java.net.*;
public class TestUDPClient{public static void main(String args[]) throws Exception{byte[] buf = (new String("Hello")).getBytes();DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678));DatagramSocket ds = new DatagramSocket(9999);ds.send(dp);ds.close();}
}

 例2

import java.net.*;
import java.io.*;
public class TestUDPServer{public static void main(String args[]) throws Exception{byte buf[] = new byte[1024];ByteArrayInputStream bais = new ByteArrayInputStream(buf);//从字节数组读数据DataInputStream dis = new DataInputStream(bais);DatagramPacket dp = new DatagramPacket(buf, buf.length);DatagramSocket ds = new DatagramSocket(5678);while(true){ds.receive(dp);long l = dis.readLong();System.out.println(l);}}
}
import java.net.*;
import java.io.*;
public class TestUDPClient{public static void main(String args[]) throws Exception{long n = 10000L;ByteArrayOutputStream baos = new ByteArrayOutputStream();DataOutputStream dos = new DataOutputStream(baos);dos.writeLong(n); byte[] buf = baos.toByteArray();System.out.println(buf.length);DatagramPacket dp = new DatagramPacket(buf,buf.length,new InetSocketAddress("127.0.0.1",5678));DatagramSocket ds = new DatagramSocket(9999);ds.send(dp);ds.close();}
}

 

转载于:https://www.cnblogs.com/seven7seven/p/3688392.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_761969.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用nuget管理C#网站项目

2019独角兽企业重金招聘Python工程师标准>>> 接手C#的项目团队后,发现历史遗留的项目dll管理有些混乱,各个开发人员名下的项目有很多自定义dll或者是很老版本的dll文件,往往一个项目从vss拉下来后无法生成成功,提示缺少…

2017淮北计算机会考,2017年安徽淮北高中会考报名网站:淮北教育局

淮北高中会考报名网站:淮北教育局【导语】每个人都会面临大大小小的考试,有可能这一辈子都会逃脱不了考试的命运。无忧考网整理了淮北高中会考报名网站信息。希望对各位有些帮助。参加2017年安徽淮北高中会考的考生可点击进入《淮北教育局》进行淮北高中…

网站品牌列表效果 jQuery效果

用户进入页面时&#xff0c;品牌列表是默认的精简显示的如下图&#xff1a; 单击商品列表下方的查看全部按钮来显示全部的品牌&#xff0c;同时推荐品牌的文字会高亮显示&#xff0c;按钮里面的文字也变成“收起查看” jQuery 代码如何&#xff1a; <script type"text/…

BCrypt加密怎么存入数据库_「安全」3种常用的信息加密技术,让网站固若金汤...

2011年12月被曝的CSDN密码泄露事故中,网站安全措施不力,导致用户数据库被黑客“拖库”并不稀奇&#xff0c;令人错愕的是数据库中的用户密码居然是明文保存&#xff0c;导致密码泄露&#xff0c;成为地下黑市交易的商品。通常&#xff0c;为了保护网站的敏感数据&#xff0c;应…

一键seo提交收录_想让百度100%收录你的页面?那就进来看看

没有收录就没有SEO收录是SEO的第一步&#xff0c;收录越多才有可能获得更高的SEO流量。最近&#xff0c;由于百度收录机制变的更加严格&#xff0c;很多站长发现网站收录变少了、变慢了、甚至不收录了。站长平台提交不能提升收录你可能做了sitemap&#xff0c;也在百度站长平台…

功能性新网站开发一点点经验心得

因为本次是全程参与了松松软文新平台的开发&#xff0c;所以卢松松今天把网站开发的一些经验心得写出来&#xff0c;供大家参考。以后大家在迁移新网站的时候&#xff0c;有一个参考依据&#xff0c;我都做了什么&#xff0c;什么时候做&#xff0c;都会列出来&#xff0c;希望…

ichunqiu在线挑战--网站综合渗透实验 writeup

挑战链接&#xff1a;http://www.ichunqiu.com/tiaozhan/111知识点&#xff1a;后台弱口令&#xff0c;md5破解&#xff0c;SQL Injection&#xff0c;写一句话木马&#xff0c;敏感信息泄露&#xff0c; 提权&#xff0c;登陆密码破解这个挑战与“我很简单&#xff0c;请不要欺…

论坛隐藏链接获取_【外链建设】测试了1500个hao123推荐的网站,只为挖掘发能外链的DZ论坛...

虽然已经过了外链为皇的时代&#xff0c;但外链在新站建设、重点关键词排名等工作场景中依然占据这很重要的位置。因为我工作后&#xff0c;大部分的时间在做品牌SEO&#xff0c;没有积攒什么外链资源&#xff1b;这次要梳理SEO技术&#xff0c;我的新博客也需要扩大外链的广泛…

网站添加第三方登陆(PHP版)

这两周正在写毕业设计&#xff0c;我做的是一个问答网站。先介绍一下这个网站&#xff1a;这是一个关于大学生在线问答的网站&#xff0c;类似知乎和百度知道&#xff0c;不过功能没有人家多&#xff0c;毕竟这个网站我一个人在做。网站部署在阿里云&#xff0c;网站包括API&am…

php动态网址可以做seo么,动态URL是什么意思?动态URL怎么做

我们经常会听到动态url&#xff0c;很多小白会不太明白&#xff1a;什么是动态URL呢&#xff1f;其实动态URL意味着网页很难被搜索引擎检索到&#xff0c;对于SEO是非常不利的。因此我们需要了解动态URL怎样做能利于SEO。德州SEO七宝总结了以下几点供大家参考&#xff1a;一、动…

asp网站显示 remote host time out

当用户访问网站的时候&#xff0c;显示如下所示信息&#xff1a; 出现这个问题&#xff0c;一般都是用户的浏览器设置了代理&#xff0c;把代理取消就好了&#xff01;

最新30个优秀的旅行网站设计作品欣赏

您可能还喜欢 12个优秀的 HTML5 网站设计案例欣赏30个漂亮的个人作品集网页设计欣赏分享35个非常漂亮的单页网站设计欣赏45个优秀的国外电子商务网站设计欣赏33个非常优秀的网站底部设计案例欣赏旅游网站的页面通常设计得很宽&#xff0c;而且搭配非常有吸引力的图片&#xff0…

作为网站的唯一入口,控制权限,保证网站安全:SpringCloud_Zuul

为什么要学习网关&#xff1f; 答&#xff1a;作为网站的唯一入口&#xff0c;控制权限&#xff0c;保证网站安全 功能&#xff1a;控制权限&#xff08;鉴权&#xff09;、分发请求&#xff08;动态路由&#xff09; 前言&#xff1a;来模拟一个需要用网关的场景 使用Spri…

进行网站设计之母版页

建立站点地图&#xff1a;web.sitemap 创建模板页面:Template.master 下面的代码为Template.master文件定义了标准的HTML元标记和页头。 页头&#xff1a;放一些DIV容器&#xff0c;一个用于菜单链接&#xff0c;一个用于登录框&#xff0c;另一个用于选择主题(一个包含了可选主…

50个极佳的企业网站案例

目前&#xff0c;大多数企业转向Web开发&#xff0c;无论是广告还是开发公司.. 在这个阶段&#xff0c;网页设计师和开发人员发挥了重要作用。 现在&#xff0c; 我们为您带来了50个极佳的企业网站案例&#xff0c;希望能给您带来灵感&#xff0c;在同一个项目或者在未来的网站…

把http网站改为Https网站

腾讯云申请完证书后添加到服务器的方法&#xff1a; https://www.qcloud.com/document/product/400/4143#2.-nginx.E8.AF.81.E4.B9.A6.E9.83.A8.E7.BD.B2申请SSL证书的常见网站有&#xff1a; https://letsencrypt.org/ https://www.startssl.com/ &#xff08;免费&#xff0…

判断是否是爬虫在访问网站

实现代码如下&#xff1a; 转载于:https://www.cnblogs.com/lovebing/p/7742451.html

整理的一些个人觉得不错的国外【图形学】技术论坛和个人网站,以后还会陆续更新...

官网&#xff1a; http://developer.nvidia.com/node/76 http://msdn.microsoft.com/en-us/library/ee663274(vvs.85) http://www.computer.org/portal/web/computingnow/cga http://developer.amd.com/Pages/default.aspx http://www.spacesimulator.net/index.php?phome htt…

做网站SEO优化,这些网络引流方法,你应该知道

对于网站SEO优化来说&#xff0c;网站流量的重要性不言而喻&#xff01;国内的站长平台工具通过用网站流量来衡量一个网站的权重&#xff0c;当你的网站流量很高的时候&#xff0c;同时会影响你网站的权重&#xff0c;进而影响你网站SEO优化排名。所以说流量对于一个网站的意义…

一个有趣的创客网站分享

http://mc.dfrobot.com.cn/portal.php 转载于:https://www.cnblogs.com/vectors07/p/7976494.html