网络编程
1.常用端口:
Web服务默认端口号:80
Tomcat服务器默认端口号:8080
Mysql服务器默认端口号:3306
一般端口号为;1024--65535
2.TCP和UDP的区别:
UDP:
1)将数据及源和目的封装成数据包,不需要建立连接。
2)每个数据报的大小限制在64k内。
3)因无连接,是不可靠协议。
4)不需要建立连接,速度快。
TCP:
1)建立连接,形成传输数据的通道。
2)在连接中进行大数据量传输。
3)通过三次握手完成连接,是可靠协议。
4)必须建立连接,效率会稍低。
3.IP地址:网络中设备的标识。不易记忆,可用主机名。本地回环地址:127.0.0.1.主机名:localhost. 类:java.net.InetAddress.
4.端口号:用于标识进程的逻辑地址,不同进程的标识。有效端口号:0-65535,其中0-1024系统使用或保留端口。
5.传输协议:通讯的规则。常见协议:TCP,UDP。
6.http://www.baidu.com http是协议,www是万维网,baidu是主机名,com表示属于商业组织。Org表示教育组织,一般都是免费。
7.类InetAddress(没有构造方法)常用方法:
public static InetAddress[] getAllByName(String host)throws UnknownHostException:获取所有主机名(不一定只有一个主机).
public static InetAddress getByName(String host)throws UnknownHostException :常用获取InetAddres的方法。
public String getHostAddress():返回 IP 地址字符串(以文本表现形式)。
public static InetAddress getLocalHost()throws UnknownHostException:返回本地主机。
public String toString():将此 IP 地址转换为 String。返回的字符串具有以下形式:主机名/字面值 IP 地址。
8.网络编程其实就是Socket编程。
9.UDP传输(DatagramPacket中封装大量客户端信息):
发送一般步骤:
1)建立udpsocket服务。
2)提供数据,并将数据封装到数据包中。
3)通过socket服务的发送功能,将数据报发送出去、
4)关闭资源。、
接收一般步骤:
1)定义udpsocket服务。通常会监听一个端口,其实就是给这个接收网络应用程序定义数字标识。方便明确哪些数据过来该程序可以处理。
2)定义一数据包,来存储接收到的字节数据。因为数据包队形中有更多的功能可以提取自己数据中的信息。
3)通过socket服务的receive方法将收到的数据存入已定义好的数据包中。
4)通过数据包对象特有的功能,将这些不同的数据取出。打印在控制台上。
5)关闭资源。
发送端和接收端是两个独立运行的程序。
UDP中常用类:DatagrameSocket(既能接收又能发送),DatagramPacket(发送和接收包都用它。)
String data=new String(dp.getData(),0,dp.getLength());
10.Ip最后若为255,表示是广播地址。可以给这个ip段的任意计算机发信息。
TCP(Socket中封装了客户端的大量信息)
1.tcp分客户端和服务端。客户端对应的对象是Socket。服务端对应的对象是ServerSocket。
2.客户端的一般步骤:
1)创建客户端的socket服务。指定目的主机和端口
Socket s = new Socket("192.168.1.254",10003);
2)为了发送数据,应该获取socket流中的输出流。
OutputStream out = s.getOutputStream();
out.write("tcp ge men lai le ".getBytes());
3)关闭
3.服务端的一般步骤:
1)建立服务端的socket服务。ServerSocket();并监听一个端口。
ServerSocket ss = new ServerSocket(10003);
2)获取连接过来的客户端对象。通过ServerSokcet的 accept方法。 没有连接就会等,所以这个方法阻塞式的。
while(true)
{
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+".....connected");
}
3)客户端如果发过来数据,那么服务端要使用对应的客户端对象, 并获取到该客户端对象的读取流来读取发过来的数据。并打印在 控制台。
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String(buf,0,len));
4)关闭服务端。(可选),但要关闭客户端。
s.close();
3.IO中的read方法,ServerSocket中的accept方法都会阻塞,等待输入对象。
4.用while循环保持服务器端一直开着。
5.输出数据时记得刷新。
6.客户端关闭时,注意想着关闭服务器端。因为若不发送关闭信息到服务器端,将导致服务器端阻塞。
s.shutdownOutput();给服务端发送关闭信息。s是Socket对象。因为bufIn.readLine是阻塞的,会等待服务端的。所以无法执行close。所以没有给服务端发送关闭信息,而服务端也在等,可能造成死循环。需要手动给服务器端发送关闭标记。关闭客户端的输出流。相当于给流中加入一个结束标记-1.
7.多次存储同一文件时,可以加(),然后给他加上编码。或者跟时间一起存,防止命名重复
8.talent是window系统提供的一个远程登录工具。可以再dos命令行下连接任意一台主机。简单理解成客户端软件。
9.Socket空构造函数,需用connect的方法,连接一个SocketAdderss,它的子类封装了ip和端口。
10.public ServerSocket(int port,int backlog);backlog是指最大连接人数。
11.一般情况下,你在浏览器上输入网址后,现在本机上找。若没有,浏览器在去找DNS服务器,上面有主机注册地址。DNS服务器会返回网址的DNS地址。