---------------------- android培训、java培训、期待与您交流! -------------------------
网络编程的基础知识
网络协议TCP/IP
网络协议规定了计算机之间网络连接的遵守的规则,数据传输的方式和通道,数据发送冲突的解决办法等。
IP地址
IP地址就是计算机在网络中的唯一标识。本地环回地址:127.0.0.1
ping 127.0.0.1可以查看本地TCP/IP协议是否正常。
Port端口
在计算机网络程序运行中,在每一个接收/发送的数据包头部都包含有一个被称之为端口的部分,用以标识网络应用程序接收不同端口上的数据。同一台计算机中不能存在同时使用一个端口的两个程序运行。
即用于标识进程的逻辑地址,有效端口号的范围为0-65535之间,0-1024之间的端口数是系统使用或一些一些特定网络服务和应用。
UDP与TCP
TCP-----传输控制协议(Transmission Control Protocol),是面向连接的通信协议。提供两台计算机可靠,无差错的数据传输。应用程序利用TCP进行数据传输时,数据源与接收目标之间会建立一个虚拟的连接。这样的连接一旦建立,数据源与接收目标就会将数据当作一个双向的字节流进行交换。
UDP-----用户数据报协议(User Datagram Protocol),是无连接的通信协议。UDP不保证数据的可靠传输。能够向若干个目标发送数据,和接收若干个发自于源的数据。源和目的并不会建立对话,收到数据的一方也不会回复确认,一台计算机如果接收到一条数据,也不会确认收到与否,因此其数据容易丢失。每个数据报的大小在64K以内。
Java网络编程的类(java.net.*)
TCP--Socket
Socket是网络驱动层提供给应用程序编程的机制,用于TCP通信的服务器和客户端。
可以把Socket比喻成是一个港口码头。应用程序把货物放到港口码头上,有着自己的IP和端口,通过IO完成货物的运送,目的港口也有自己的IP和端口用于建立这种连接。(getInputstream方法返回输入流;getOutputStream方法返回输出流)
ServerSocket类用于TCP通信的服务器端,调用accept方法等待对客户端连接的请求,不使用ServeerSocket时应调用close方法关闭。
TCP客户端程序与TCP服务器端程序的交互过程:
(1)服务器程序创建一个ServerSocket,然后调用accept方法等待客户来连接。
(2)客户端程序创建一个Socket并请求与服务器建立连接。
(3)服务器接收客户的连接请求,并创建一个新的Socket与客户建立专线连接。
(4)建立了连接的两个Socket在一个单独的线程上对话。
UDP---DatagramSocket
send(DatagramPacket p)方法用于发送DatagramPacket。
receive(DatagramPacket p)方法用于接受DatagramPacket。
DatagramPacket
封装数据用于实现无连接包的投递服务。
public DatagramPacket(byte[] buf,int length)
public DatagramPacket(byte[] buf,int length,InetAddress address,int port)
getInetAddress和getPort方法
getByName方法
简单的UDP程序
import java.io.*;
import java.net.*;
public class UDPSender
{
public static void main(String[] args) throws Exception
{
DatagramSocket ds = new DatagramSocket();// 端口由系统自己分配
byte[] buf="miximixi".getBytes(); //String str = "miximixi"
ds.send(new DatagramPacket(buf, buf.length(), InetAddress.getByName("192.168.1.100"), 2014)); //str.getBytes()中文的话要str.getBytes().length
ds.close();
}
}
public class UDPRecv
{
public static void main(String[] args) throws Exception
{
DatagramSocket ds = new DatagramSocket(2014);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
ds.receive(dp);
String ip = dp.getAddress().getHostAddress();
String data=new String(dp.getData(), 0, dp.getLength());
int port =dp.getPort();
System.out.println(ip + "::" + data + "::" + port);
ds.close();
}
}
TCP的C/S简单演示
import java.io.*;
import java.net.*;
public class ClientSendatext
{
public static void main(String[] args) throws Exception {
Socket s = new Socket("192.168.1.127", 2014);
OutputStream os = s.getOutputStream();// 获得输出流
os.write("miximixi".getBytes());
s.close();
}
}
public class Servertext
{
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(2014);// 创建服务端
Socket s = ss.accept();// 等待获取连接的客户端
InputStream is = s.getInputStream();// 获得输入流
byte[] buf = new byte[1024];
int len = is.read(buf);
System.out.println(new String(buf, 0, len));// 打印获得的信息
s.close();
ss.close();
}
}
---------------------- android培训、java培训、期待与您交流! -------------------------
详情查询:黑马训练营