Author: Ching
Original address: http://blog.csdn.net/qingdujun/article/details/39312241
This article shows that the use of the socket network chat group chat, the implementation of the client to the "LAN" network segment inside the machine to send a broadcast, when the "886" is sent, indicating that the client shutdown.
1) client, send data to the server, send "886" to shut down the client.
2) The server, has been listening to 9527 ports, the monitoring of the data printed on the console.
3) client + server version, to implement a multi-threaded chat program that can send data and accept data.
Some points to note are: 1) Here is a broadcast to the LAN. 2) LAN broadcast address: 192.168.1.255 3) If the popup exception in thread "main" java.net.BindException:Address the already in use:cannot bind problem, please Change a port number (the port number has not been released).
First, the client: the main use of the input from the keyboard, and when the "886" packet is sent, close the client.
Package Udp.send2.qdj;import Java.io.bufferedreader;import Java.io.inputstreamreader;import Java.net.datagrampacket;import Java.net.datagramsocket;import Java.net.inetaddress;public class CUdpSend2 {public static void Main (string[] args) throws Exception {//Send data from native 1234 port datagramsocket ds = new Datagramsocket (1234);// Input from keyboard BufferedReader BUFR = new BufferedReader (new InputStreamReader (system.in)); String line = Null;while ((Line=bufr.readline ())!=null) {if ("886". Equals (line)) break;byte[] buf = Line.getbytes ();// The data is packaged and sent to the 9527 port of the Datagrampacket DP = new Datagrampacket (buf, Buf.length,inetaddress.getbyname ("192.168.1.254"), 9527);//Send data Ds.send (DP);} Close resource Ds.close ();}}
second, the server side, the main is always listening to 9527 ports, and the monitoring of the data to print to the console.
1) The console can be dragged and released, if need to put in the "minimize" to the left of the bottom of the option is OK.
2) Switch the console, you can click on the "minimize" to the left of the 2nd option.
Package Udp.rece2.qdj;import Java.net.datagrampacket;import Java.net.datagramsocket;public class CUdpRece2 {public static void Main (string[] args) throws exception{//monitor 9527 port datagramsocket ds = new Datagramsocket (9527); while (true) { byte[] buf = new byte[1024];//defines a packet datagrampacket DP = new Datagrampacket (buf, buf.length);//Accept Packet Ds.receive (DP);// Extract data String IP = dp.getaddress (). gethostaddress (); String data = new String (Dp.getdata (), 0,dp.getlength ()); SYSTEM.OUT.PRINTLN ("IP number:" +ip+ "\ n data:" +data);}}}
Third, synthesize the above, write a multi-line Cheng Chat program that can be accepted and can be sent:
Package Udp.chat.qdj;import Java.io.bufferedreader;import Java.io.inputstreamreader;import java.net.DatagramPacket Import Java.net.datagramsocket;import java.net.inetaddress;//send End class send implements Runnable{private Datagramsocket ds;public Send (datagramsocket s) {ds = S;} public void Run () {try {//from keyboard input BufferedReader bufr = new BufferedReader (new InputStreamReader (system.in)); String line = Null;while ((Line=bufr.readline ())!=null) {if ("886". Equals (line)) break;byte[] buf = Line.getbytes ();// Package the data and send it to the 5656 port//LAN broadcast address of the machine: 192.168.1.255DatagramPacket DP = new Datagrampacket (buf, Buf.length, Inetaddress.getbyname ("10.100.56.210"), 5656);//Send data Ds.send (DP);}} catch (Exception e) {throw new RuntimeException ("Send side Failed");}}} Receive End Class Rece implements Runnable{private datagramsocket ds;public rece (datagramsocket s) {ds = S;} public void Run () {try {while (true) {byte[] buf = new byte[1024];//defines a packet datagrampacket DP = new Datagrampacket (buf, buf. length);//Accept Packet Ds.receive (DP);//extract data 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 ("Receiver failed");}}} public class Cudpchat {public static void main (string[] args) throws exception{//send side can not specify a port, the system randomly assigns a datagramsocket Sendsocket = new Datagramsocket ();D atagramsocket recesocket = new Datagramsocket (5656);//Turn on multithreading new thread (new Send Sendsocket). Start (); New Thread (New Rece (Recesocket)). Start ();}}
Display interface:
references: Java video Bi Xiangdong presenter
Original address: http://blog.csdn.net/qingdujun/article/details/39312241
Java uses the socket for network Chat (2) Group Chat Edition