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()); } }}