day26_网络编程第一天
1、网络通信三要素(掌握)
IP
2、UDP协议与TCP协议各自特点(掌握)
UDP
1.不需要建立连接;
2.有数据大小限制,每个数据报的大小在限制在64k;
3.无连接,是不可靠协议;
4.速度快。
TCP
1.在连接中进行大数据量传输(数据无限制);
2.通过三次握手完成连接;
3.是可靠协议;
4.必须建立连接,效率会稍低。
3、Socket
通过IP地址和端口号可以 创建一个Socket对象,也就是说Socket由IP和端口组成
4、InetAddress
概述:
获取本地主机:getLocalHost获取任意主机:getByName(String ip)
主机名:getHostName
主机Ip地址:getHostAddress
5、DatagramPacket
DatagramPacket(byte[] buf, int length) 构造 DatagramPacket ,用来接收长度为 length 的数据包。 |
DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 |
成员方法:
InetAddress |
getAddress() 返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。 |
byte[] |
getData() 返回数据缓冲区。 |
int |
getLength() 返回将要发送或接收到的数据的长度。 |
int |
getPort() 返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。 |
SocketAddress |
getSocketAddress() 获取要将此包发送到的或发出此数据报的远程主机的 SocketAddress(通常为 IP 地址 + 端口号)。 |
void |
setAddress(InetAddress iaddr) 设置要将此数据报发往的那台机器的 IP 地址。 |
void |
setData(byte[] buf) 为此包设置数据缓冲区。 |
void |
setData(byte[] buf, int offset, int length) 为此包设置数据缓冲区。 |
void |
setLength(int length) 为此包设置长度。 |
void |
setPort(int iport) 设置要将此数据报发往的远程主机上的端口号。 |
6、UDP代码
客户端代码
package udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* 创建码头
* 创建集装箱
* 发送
* @author haoyongliang
*
*/
public class Client {
public static void main(String[] args) throws Exception{
System.out.println("客户端启动了啊");
byte[] data = "nihao a".getBytes();
DatagramSocket socket = new DatagramSocket();
DatagramPacket packet = new DatagramPacket(data, data.length,InetAddress.getByName("192.168.48.10"),12306);
socket.send(packet);
socket.close();
}
}
package udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 1、创建码头
* 2、创建集装箱
* 3、将码头拿到的数据装入集装箱
* 4、通过集装箱获取数据
* @author haoyongliang
*
*/
public class Server {
public static void main(String[] args)throws Exception {
DatagramSocket socket = new DatagramSocket(12306);
DatagramPacket packet = new DatagramPacket(new byte[1024*64], 1024*64);
socket.receive(packet);
byte[] data = packet.getData();
int length = packet.getLength();
System.out.println(new String(data,0,length));
}
}
4、TCP代码
TCP 三次握手:
package tcp;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception{
//1、创建soket
Socket socket= new Socket("127.0.0.1", 12306);
/*
* A 客户端向服务端写数据
*/
OutputStream os = socket.getOutputStream();
os.write("nihao,server,I'm client".getBytes());
os.flush();
/*
* D 客户端读取服务端发送过来的数据
*/
InputStream inputStream = socket.getInputStream();
byte[] data = new byte[1024];
int len = inputStream.read(data);
System.out.println(new String(data,0,len));
socket.close();
}
}
package tcp;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception{
//1、创建ServerSocket
ServerSocket ss = new ServerSocket(12306);
//2、与客户端建立连接
Socket socket = ss.accept();//从请求队列中拿到Socket对象
/*
* B 服务端读取客户端发过来的数据
*/
InputStream inputStream = socket.getInputStream();
byte[] data = new byte[1024];
int len = inputStream.read(data);
System.out.println(new String(data,0,len));
/*
* C 服务端向客户端写入数据
*/
OutputStream outputStream = socket.getOutputStream();
outputStream.write("hehe".getBytes());
outputStream.flush();
socket.close();
}
}
5、练习
1、UPD客户端发送键盘录入数据,服务端打印客户端发送的消息
6、今天必须掌握的内容,面试题,笔试题。(掌握这个就可以放心学习后面的知识了)
day26_网络编程第一天的更多相关文章
- c#网络编程-第一章
1.需求 获得网页数据,并填充到webbrowser空间中 2.代码示例 private void button1_Click_1(object sender, EventArgs e) { //1. ...
- unix网络编程第一章demo
之前一直以为time_wait状态就是主动关闭的那一方产生.然后这个端口一直不可以用.实际我发现服务端监听一个端口.客户端发来连接后.传输数据后.服务端关闭客户端套接字后.用netstat -nat ...
- 网络编程[第一篇]基于tcp协议的套接字编程
将服务端-客户端的连接比作双方打电话的过程 2019-07-24 一.客户端 主动的一方: 客户端实例化一个socket对象--> 主动像服务端发送连接请求--> (服务端接受请求后即可进 ...
- 《安卓网络编程》之第一篇 java环境下模拟客户端、服务器端
1.Socket简介 在网络上的两个程序通过一个双向的通信连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个 ...
- 《java入门第一季》之网络编程初探
由于在写有关javaweb的博客,在写到web服务器的时候需要回顾网络编程的知识,提前把网络编程放在前面写. 直接上代码解释: import java.net.InetAddress; import ...
- 《Go语言网络编程》第一章:体系
原书地址:http://tumregels.github.io/Network-Programming-with-Go 如果不知道想要构建什么,是不可能创建一个系统的.而且如果不知道它工作的环境,也同 ...
- Python高级网络编程系列之第一篇
在上一篇中我们简单的说了一下Python中网络编程的基础知识(相关API就不解释了),其中还有什么细节的知识点没有进行说明,如什么是TCP/IP协议有几种状态,什么是TCP三次握手,什么是TCP四次握 ...
- Linux Socket 网络编程
Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...
- 猫哥网络编程系列:详解 BAT 面试题
从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...
随机推荐
- [CentOS] 解决 crontab 无法读取环境变量的问题
参考资料:http://blog.slogra.com/post-238.html 1. 问题描述 一段数据处理的 shell 程序,在 shell 中手动运行,可以正确执行.但是,把它放在 cron ...
- css3圆角(还有百分比设置椭圆) 阴影 字体
一. 现在前面只写知识点,全部内容放在后面截图展示: 给元素添加圆角: border-radius属性,他的值如果等于高的一半,将会等到一个圆形,大于一半叶然是一个圆形 radius是指半径,他求出圆 ...
- php基础_变量和比较符
本人php菜鸟一枚,初读<php和mysql web开发>,把其中的比较基础的一些东西列举出来,方便和自己一样的菜鸟快速入门,并且方便自己以后复习理解. ①变量 1.比较有特色的应该是变量 ...
- 浅谈学习掌握linux系统的优势
Linux系统让我们懂得了共享.开放.自由可以让人类生活的更加美好,开源精神是一种让每个从事Linux行业的技术人员从骨子里自豪的情怀,开源产品的兴盛受益于开源社区的强壮根基.Linux真的给了我很多 ...
- [WebServer] Windows操作系统下 Tomcat 服务器运行 PHP 的环境配置
前言: 由于本人在开发和学习过程中需要同时部署 JavaWeb 和 PHP 项目,于是整理了网上的一些相关资料,并结合自己的实际操作,记录于此,以供参考. 一.环境(64bit): 1.操作系统.To ...
- <java基础学习>02JAVA的基础组成(2)
60000-0000 0000-0000 0000-0000 0000-0110 0000-0110 -6这个数的正数的二进制取反,再加1 0000-0110取反: 1111-1001 + 0000- ...
- Android studio 项目的layout的文件打开,preview 视图无法显示,提示“no sdk found...”可能原因?
1.安装android studio后启动,引导新的下载的sdk文件夹,不要默认在c:\users\你的用户名\appdata...下的sdk文件夹. 2.如果已经默认的,重新在settings/pr ...
- C#3.0 扩展方法
扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.对于用 C# 和 Visual ...
- AFN断点续传思路
- Selenium+Python的环境配置
因为项目的原因,最近较多的使用了UFT来进行自动化测试工作,半年没有使用Selenium了,于是在自己的电脑上重新配置了基于python3.x的selenium环境,配置过程大致如下: 1. Sele ...