UDP 网络协议java
udp 发送端小程序
public class SendUdp {
public static void main(String[] args) {
try {
//一、建立一个 DatagramSocket 的对象 用来调用发送的方法
DatagramSocket send = new DatagramSocket();
byte[] b = new byte[1024];
int length = 0;
String data = "客户端发送的数据...";
b = data.getBytes();
//获取要发送的ip地址 InetAddress ip = InetAddress.getByName("192.168.10.99");
//这里获取 本机的ip地址
InetAddress ip = InetAddress.getLocalHost();
//把 要发送的数据 打包
//二、建立一个数据报包
DatagramPacket packet = new DatagramPacket(b, length, ip, 110);
//三、发送数据
//把打包好的 数据报包 发送
send.send(packet);
//关闭 发送端
send.close();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
-----------服务器
udp 接收端网络
public class ReceiveUdp {
public static void main(String[] args) {
try {
//建立一个 接收端 对象 用来接收 发送端 发送过来的 数据
DatagramSocket receiveudp = new DatagramSocket(6666);
//建立一个 接收 数据 的数据报包 来装数据
byte[] b = new byte[1024];
DatagramPacket packet = new DatagramPacket(b, b.length);
receiveudp.receive(packet);
System.out.println(new String(packet.getData()));
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
-------------------------------------------------------------------------app
tcp 客户端框架
public class ClientTcp {
public static void main(String[] args) {
try {
//建立一个套接字 对象 用来设置 接收端的 IP 和端口 是谁
Socket client = new Socket("192.168.10.42",999);
//获得 要 发送数据 的 输出管道
OutputStream os = client.getOutputStream();
String data = "tcp客户端发送的数据...";
byte[] b = new byte[1024];
b = data.getBytes();
//发送数据
os.write(b);
//关闭 客户端
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
---------------
tcp 服务端socket
public class ServerceTcp {
public static void main(String[] args) {
try {
//建立一个 服务端 对象 用来 设置 要接收 客户端 的接口
ServerSocket server = new ServerSocket(999);
//监听 看有没有 客户端 链接 本服务端
Socket socket = server.accept();
//建立一个 接收通道
InputStream is = socket.getInputStream();
byte[] b = new byte[1024];
//接收 客户端 发送 过来的 数据
int length = is.read(b);
System.out.println(new String(b,0,length));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}tcp
-------------------------------------------------------------------ide
java 可视化 的一个 局域网聊天 小程序this
发送端
public class Client1 {
public static void main(String[] args) {
new ClientView();
}
}
class ClientView extends JFrame implements ActionListener{
private TextField tf;
public ClientView() {
//建立一个标签
JLabel prompt_box = new JLabel("请输入用户名:");
//建立一个容器类 panel 面板
Panel p = new Panel();
this.add(p);
//把标签添加到 框架上
this.add(prompt_box,BorderLayout.NORTH);
//建立一个本文编辑框
tf = new TextField(25);
//把文本编辑框 加到面板里
p.add(tf);
//建立一个按钮
JButton butn_ok = new JButton("肯定");
//把按钮 加到面板
p.add(butn_ok);
//给按钮添加一个监听事件
butn_ok.addActionListener(this);
this.setBounds(100, 100, 300, 300);
this.setTitle("客户端");
this.setVisible(true);
this.setResizable(false);
//设置退出 程序就结束
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
//获取文本框的内容
String text_str = tf.getText();
//建立第二个窗体
new ClientView2(text_str);
//隐藏窗口
this.setVisible(false);
}
}
class ClientView2 extends JFrame implements ActionListener,Runnable{
private TextField tf;
private TextArea ta;
private Socket client_socket;
public ClientView2(String name) {
//建立一个客户端对象 来设置要发送的ip 和 端口
try {
client_socket = new Socket("127.0.0.1",999);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//建立一个文本域
ta = new TextArea(13,13);
ta.setEditable(false);
//建立一个容器类 panel 面板
Panel p = new Panel();
//建立一个本文编辑框
tf = new TextField(25);
//建立一个按钮
JButton butn_send = new JButton("发送");
//把文本编辑框 加到面板里
p.add(tf);
//把按钮 加到面板
p.add(butn_send);
//设置 发送内容按钮 的监听
butn_send.addActionListener(this);
//把文本域放在 框架里
this.add(ta,BorderLayout.NORTH);
//把面板放进 框架里
this.add(p);
this.setBounds(100, 100, 300, 300);
this.setTitle(name + "的客户端");
this.setVisible(true);
//不能够改变窗体的大小
this.setResizable(false);
//建立一个线程接收数据
new Thread(this).start();
//设置退出 程序就结束
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
//客户端
OutputStream os;
try {
//获取写的 通道
os = client_socket.getOutputStream();
//准备要发送的数据
String message = tf.getText() + "\r\n";
os.write(message.getBytes());
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
@Override
public void run() {
//接收服务端发送 过来的数据
InputStream recevice;
try {
recevice = client_socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(recevice));
while(true){
String read_message = br.readLine();
//把接收到的 信息打印到 文本域
ta.append(read_message + "\r\n");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
-----------
服务端
class ServerView1 extends JFrame implements ActionListener,Runnable{
private TextArea ta;
private ArrayList<Socket> list;
private Socket server_socket;
//启动服务器界面
public ServerView1() {
//建立一个文本域
ta = new TextArea(65,65);
//设置文本域不能够写
ta.setEditable(false);
//建立一个容器 panel
Panel p = new Panel();
//建立一个按钮
JButton butn_server = new JButton();
butn_server.setText("启动服务器");
//监听启动服务器 按钮
butn_server.addActionListener(this);
//把按钮加到面板里
p.add(butn_server);
//把文本域添加到 面板里
p.add(ta);
ta.setEditable(true);
this.add(p);
this.setBounds(100, 100, 500, 500);
this.setResizable(false);
this.setTitle("服务器端");
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override public void actionPerformed(ActionEvent e) { //服务器端 try { ServerSocket server = new ServerSocket(999); list = new ArrayList<Socket>(); ta.setText("服务器已启动..."); //设置tcp监听 有没有客户端 接入服务端 while(true){ server_socket = server.accept(); //把接受到的客户端存入集合里面 list.add(server_socket); //开启一个专门用来 搜集客户端 //发送过来的信息 而后遍历转发 new Thread(this).start(); } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } @Override public void run() { InputStream is; BufferedReader br; OutputStream os; try { is = server_socket.getInputStream(); br = new BufferedReader(new InputStreamReader(is)); String ip = server_socket.getInetAddress().getHostName(); while(true){ //读取数据 String message = br.readLine(); String message_ip = ip + ":" + message + "\r\n"; for(Socket s :list){ os = s.getOutputStream(); os.write(message_ip.getBytes()); } } }catch (IOException e) { //有客户端退出 就从 集合里删除 String out_ip = server_socket.getInetAddress().getHostAddress(); ta.append(out_ip + "已经退出" + "\r\n"); for(Socket s : list){ if(s.equals(server_socket)){ list.remove(s); } } //System.out.println(list.size()); } }}