java网络编程主要以下的知识:
IP地址和域名
IP地址是一个规定,现在使用的是IPv4,既由4个0-255之间的数字组成,IP地址的概念类似于电话号码、身份证这样的概念。由于IP地址不方便记忆,所以有专门创造了域名(Domain Name)的概念,其实就是给IP取一个字符的名字,例如163.com、sina.com等。IP和域名之间存在一定的对应关系。如果把IP地址类比成身份证号的话,那么域名就是你的姓名。其实在网络中只能使用IP地址进行数据传输,所以在传输以前,需要把域名转换为IP,这个由称作DNS的服务器专门来完成。所以在网络编程中,可以使用IP或域名来标识网络上的一台设备。
网络协议:
TCP/IP 协议:是面向连接的通信协议,通信建立通信管道进行大数据量的可靠传输,效率会较低。
UDP协议:是面向无连接的通信协议,不需要建立连接,数据发送前要封装成数据包,包最大的不超过64K,传输数据不可靠,但是速度快。
UDP协议:是面向无连接的通信协议,不需要建立连接,数据发送前要封装成数据包,包最大的不超过64K,传输数据不可靠,但是速度快。
Socket
Socket:是为网络服务提供的一种机制,通信的双方都有Socket,通俗的讲,网络通信其实就是Socket通信。
网络传输的具体操作都有Socket完成,所以我们可以把Socket比喻成一个码头,我们只要把货物送到码头,然后剩下的运输工作就全交给码头了。那我们怎么把货物送到码头呢,我们可以用集装箱,所以java还提供了一个集装箱也就是Packet,主要我们把货物装上集装箱,送到码头,然后就不用管了,具体的运输,码头完成,码头通过我们指定的地址把货物送出去,送到另外一个码头,然后由接受方进行具体的操作。
网络传输的具体操作都有Socket完成,所以我们可以把Socket比喻成一个码头,我们只要把货物送到码头,然后剩下的运输工作就全交给码头了。那我们怎么把货物送到码头呢,我们可以用集装箱,所以java还提供了一个集装箱也就是Packet,主要我们把货物装上集装箱,送到码头,然后就不用管了,具体的运输,码头完成,码头通过我们指定的地址把货物送出去,送到另外一个码头,然后由接受方进行具体的操作。
UDP
建立一个udp发送端步骤:
1,建立updsocket服务。
2,提供数据,并将数据封装到数据包中。
3,通过socket服务的发送功能,将数据包发出去。
4,关闭资源。
建立udp的接收端步骤:
1,定义udpsocket服务。通常会监听一个端口。其实就是给这个接收网络应用程序定义数字标识。
方便于明确哪些数据过来该应用程序可以处理。
2,定义一个数据包,因为要存储接收到的字节数据。
因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。
3,通过socket服务的receive方法将收到的数据存入已定义好的数据包中。
4,通过数据包对象的特有功能。将这些不同的数据取出。打印在控制台上。
5,关闭资源。
1,建立updsocket服务。
2,提供数据,并将数据封装到数据包中。
3,通过socket服务的发送功能,将数据包发出去。
4,关闭资源。
建立udp的接收端步骤:
1,定义udpsocket服务。通常会监听一个端口。其实就是给这个接收网络应用程序定义数字标识。
方便于明确哪些数据过来该应用程序可以处理。
2,定义一个数据包,因为要存储接收到的字节数据。
因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。
3,通过socket服务的receive方法将收到的数据存入已定义好的数据包中。
4,通过数据包对象的特有功能。将这些不同的数据取出。打印在控制台上。
5,关闭资源。
public class UdpRece{
public static void main(String[] args) {
//创建udpsocket服务建立端点
try {
DatagramSocket ds = new DatagramSocket(10000);
//定义数据包
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//通过服务的receive方法将收到的数据存入数据包中
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();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
//创建udp服务,通过DatagramSocket对象
try {
DatagramSocket ds = new DatagramSocket(8888);
//确定数据,封装成数据包
byte[] buff = "udp ge me ilai dal daak fdk".getBytes();
DatagramPacket dp = new DatagramPacket(buff,buff.length,InetAddress.getLocalHost(),10000);
//dp.setPort(1231);
//通过socket服务的发送功能,将数据包发出去
ds.send(dp);
ds.close();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
TCP
建立有一个TCP通信的步骤:
客户端:
1,建立socket服务。指定要连接主机和端口。
2,获取socket流中的输出流。将数据写到该流中。通过网络发送给服务端。
3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。
4,关闭客户端资源。
服务端:
1,建立服务端的socket服务。ServerSocket();并监听一个端口。
2,获取连接过来的客户端对象。通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。
3,客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。并打印在控制台。
4,关闭服务端。(可选)
客户端:
1,建立socket服务。指定要连接主机和端口。
2,获取socket流中的输出流。将数据写到该流中。通过网络发送给服务端。
3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。
4,关闭客户端资源。
服务端:
1,建立服务端的socket服务。ServerSocket();并监听一个端口。
2,获取连接过来的客户端对象。通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。
3,客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。并打印在控制台。
4,关闭服务端。(可选)
class TcpServer{
public static void main(String[] args) throws Exception
{
//建立服务端socket服务。并监听一个端口。
ServerSocket ss = new ServerSocket(10003);
//通过accept方法获取连接过来的客户端对象。
while(true)
{
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+".....connected");
//获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据。
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String(buf,0,len));
s.close();//关闭客户端.
}
//ss.close();
}
}
class TcpClient2
{
public static void main(String[] args)throws Exception{
Socket s = new Socket("192.168.1.254",10004);
OutputStream out = s.getOutputStream();
out.write("服务端,你好".getBytes());
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String(buf,0,len));
s.close();
}
}