* 网络端口不是物理端口,是逻辑端口;MySQL:3306 网络:80
* IP公网现在不是一个人一个IP了,一片区域一个公网IP。 本地回环地址:127.0.0.1对应本地主机名localhost* 传输层:udp(即时聊天,网络会议) tcp(下载,打电话)
* 网络层:ip (InetAddress)
* 应用层:HTTP FTP
UDP例子程序:
package javaBase.net;
import java.net.*;
/*
* 发送端
*/
public class UdpSend {
public static void main(String[] args) throws Exception{
//1,创建udp服务,DatagramSocket();
DatagramSocket ds = new DatagramSocket(8888);//自定义数字标识8888
//2,确定数据,并封装成数据包
byte[] buf = "udp said i am coming".getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.4"),10000);
//3,用send()方法,发送数据包
ds.send(dp);
//4,关闭资源
ds.close();
}
}
package javaBase.net;
import java.io.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/*
* 接收端
*/
public class UdpReceive {
public static void main(String[] args) throws Exception{
//1,创建udp socket,建立端点
DatagramSocket ds = new DatagramSocket(10000);//指定端口数字标识
//2,定义接收包,存放接收到的数据
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//3,通过receive()方法,接收数据并写入包中
ds.receive(dp);
//4,从包中提取数据
String ip = dp.getAddress().getHostAddress();//获取本机IP?
int port = dp.getPort();//获取发送端端口
String data = new String(dp.getData(),0,dp.getLength());//获取数据
System.out.println(ip+" : "+port+"["+data+"]");
//5,关闭资源
ds.close();
}
}
键盘输入,循环接收:
发送端:
package javaBase.net;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.*;
/*
* 发送端
*/
public class UdpSend {
public static void main(String[] args) throws Exception{
send2();
}
/*
* 键盘输入
*/
public static void send2() throws Exception{
DatagramSocket ds = new DatagramSocket(8888);
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = in.readLine())!=null){
if("over".equals(line))
break;
byte[] buf = line.getBytes();
DatagramPacket dp =
new DatagramPacket(buf, buf.length,InetAddress.getByName("localhost"),10000);
ds.send(dp);
}
ds.close();
}
/*
* 详细步骤,一次性
*/
public static void send1()throws Exception{
//1,创建udp服务,DatagramSocket();
DatagramSocket ds = new DatagramSocket(8888);//自定义数字标识8888
//2,确定数据,并封装成数据包
byte[] buf = "udp said i am coming".getBytes();
DatagramPacket dp =
new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.4"),10000);
//3,用send()方法,发送数据包
ds.send(dp);
//4,关闭资源
ds.close();
}
}
接收端:
package javaBase.net;
import java.io.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/*
* 接收端
*/
public class UdpReceive {
public static void main(String[] args) throws Exception{
receive2();
}
/*
* 循环等待接收
*/
public static void receive2() throws Exception{
DatagramSocket ds = new DatagramSocket(10000);
while(true){
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());
System.out.println(ip+": "+data );
}
}
/*
* 详细步骤
*/
public static void receive1() throws Exception{
//1,创建udp socket,建立端点
DatagramSocket ds = new DatagramSocket(10000);//指定端口数字标识
//2,定义接收包,存放接收到的数据
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//3,通过receive()方法,接收数据并写入包中
ds.receive(dp);
//4,从包中提取数据
String ip = dp.getAddress().getHostAddress();//获取发送端IP?
int port = dp.getPort();//获取发送端端口
String data = new String(dp.getData(),0,dp.getLength());//获取数据
System.out.println(ip+" : "+port+"["+data+"]");
//5,关闭资源
ds.close();
}
}
即时聊天程序
package javaBase.net;
import java.net.*;
import java.io.*;
/*
* 发送线程
*/
class Send implements Runnable{
//成员socket
private DatagramSocket ds ;
//构造方法接收传入socket
public Send(DatagramSocket ds) {
this.ds = ds;
}
@Override
public void run() {
try {
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = in.readLine())!=null){
if("over".equals(line))
break;
byte[] buf = line.getBytes();
DatagramPacket dp =
new DatagramPacket(buf, buf.length,InetAddress.getByName("localhost"),10002);
ds.send(dp);
}
} catch (Exception e) {
throw new RuntimeException("发送端错误");
}
}
}
/*
* 接收线程
*/
class Receive implements Runnable{
//成员socket
private DatagramSocket ds ;
//构造方法初始化socket
public Receive(DatagramSocket ds) {
this.ds = ds;
}
@Override
public void run() {
try {
while(true){
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());//看看发的什么东西
System.out.println(ip+": "+data);
}
} catch (Exception e) {
throw new RuntimeException("接收端错误");
}
}
}
public class Chat {
public static void main(String[] args) throws Exception{
DatagramSocket sendSocket = new DatagramSocket();//发送端可以随机端口号
DatagramSocket receiveSocket = new DatagramSocket(10002);//接收端指定端口
new Thread(new Send(sendSocket)).start();
new Thread(new Receive(receiveSocket)).start();
}
}