Ip地址
网络中设备的标识
不宜记忆,可用主机名
本地回环地址:127.0.01 主机名:localhost
端口号
用于标识进程的逻辑地址,不同进程的标识不同
有效端口:0-65535,其中0-1024系统使用或保留端口
传输协议
简单来说就是通讯的规则
常见协议:tcp,udp
UDP
将数据及源和目的封装在数据包中,不需要建立连接
每个数据包大小限制在64k内
因无连接,是不可靠的协议
因为不需要连接,所以速度快
TCP
建立连接,形成传输数据的通道
在连接中进行大数据量传输
通过三次握手完成连接,是可靠协议
必须建立连接,效率偏低
Socket
Socket就是为网络服务提供的一种机制
通信两端都有Socket
网络通信其实就是socket金的通信
数据在两个socket键通过IO传输
UDP发送端与接受端的建立
发送端
public class UdpSend {
public static void main(String[] args) throws Exception{
//创建datagramSock对象,用来创建udp的发送端
DatagramSocket ds = new DatagramSocket();
//打包数据
byte[] data = "haha".getBytes();
DatagramPacket dp =
New DatagramPacket(data,data.length,InetAddress.getByName("sds"),10000);
//发送数据
ds.send(dp);
//关闭资源
ds.close();
}
}
UDP接受端
public class UdpRec {
public static void main(String[] args) throws Exception{
//创建用来接受数据的套接字
DatagramSocket ds = new DatagramSocket(10000);
//创建DatagramPacket对象,用来处理接受到的数据包
byte[] data = new byte[1024];
DatagramPacket dp = new DatagramPacket(data,data.length);
//调用recive方法接受数据
ds.receive(dp);
//获取数据
String str = new String(dp.getData(),0,dp.getLength());
System.out.println(str);
//关闭资源
ds.close();
}
}
TCP客户端与服务端代码实例
要求客户端发送字符,服务端接受并转换成大写并返回
客户端代码:
public class TcpCilent {
public static void main(String[] args) throws Exception{
//建立Socket服务对象
Socket s = new Socket(InetAddress.getByName("sds"),10003);
//建立键盘输入流
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//建立网络输出流
BufferedWriter bwOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//写出数据
bwOut.write(br.readLine());
//因为写出的数据没有结束符,所以readLine方法不会结束,所以要在写出数据的时候天界换行,并刷新
bwOut.newLine();
bwOut.flush();
//建立网络输入流
BufferedReader brIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(brIn.readLine());
br.close();
s.close();
}
}
服务端代码:
public class TcpServe {
public static void main(String[] args) throws Exception
{
//建立服务端套接字对象
ServerSocket ss = new ServerSocket(10003);
//获取客户端对象
Socket s = ss.accept();
//String ip = s.getInetAddress().getHostName();
//System.out.print(ip);
//获取客户端的输入流
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//获取输入流的内容
String str = br.readLine();
//获取客户端的输出流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//把客户端发送过来的数据转换成大写并写出去
bw.write(str.toUpperCase());
//添加结束符,并刷新
bw.newLine();
bw.flush();
s.close();
ss.close();
}
}
|