Objective
原创文章欢迎转载,请保留出处。若有任何疑问建议,欢迎回复。邮箱:[email protected]
I learn Java socket practiced Hand applet, master please floated, only as a study note, no technical content.
Analysis
Here, two separate threads are used for the package and packet collection, and two classes are designed to implement the Runnable interface, which communicates with the main form of the pipeline.
Code
mainfest.txt file : Note here there are myqq. Carriage return after myqq and space before Myqq.myqq
Main-Classmyqq.MyQQ
Myqq.java file :
Package Myqq;import Java.awt.*;import java.awt.Event. *;import Java.io.*;import Java.net.*;class Udpsend implements runnable{PrivateDatagramsocket ds;PrivateInputStream is; Public Udpsend(Datagramsocket Ds,inputstream is) {Try{ This. ds = ds; This. is= is; }Catch(Exception e) {Throw NewRuntimeException ("Send side Error"); } } Public void Run() {Try{//Read data from a text boxBufferedReader br =NewBufferedReader (NewInputStreamReader ( is)); String s =NULL; while((S=br.readline ())! =NULL) {//Stop sending data when you enter 886 if("886". Equals (s)) Break;byte[] buf = S.getbytes ();//This is the destination IP and port to send the packet, or it can be set to broadcast addressDatagrampacket DP =NewDatagrampacket (Buf,buf.length,inetaddress.getbyname ("169.254.255.255"),12345); Ds.send (DP); } br.close (); Ds.close (); }Catch(Exception e) {Throw NewRuntimeException ("Send side Error"); }}}class Udprecv implements runnable{PrivateDatagramsocket ds;PrivateOutputStream is; Public Udprecv(Datagramsocket Ds,outputstream is) {Try{ This. ds = ds; This. is= is; }Catch(Exception e) {Throw NewRuntimeException ("Receive-side error"); } } Public void Run() {Try{ while(true) {//UDP The maximum packet length is 64k byte[] buf =New byte[1024x768* -]; Datagrampacket DP =NewDatagrampacket (buf,buf.length); Ds.receive (DP);//Get the source IP and data contents of the packetString IP = dp.getaddress (). gethostaddress (); String data =NewString (Dp.getdata (),0, Dp.getlength ()); String s = ip+"::"+data; is. Write (S.getbytes ()); is. Flush (); } }Catch(Exception e) {Throw NewRuntimeException ("Receive-side error"); }}}class myqq {Private StaticFrame R;Private StaticTextArea Tsend;//Send text box Private StaticTextArea Trecv;//Receive text box //Send communication pipeline Private StaticPipedInputStream sis;Private StaticPipedOutputStream SOS;//Receive communication pipeline Private StaticPipedInputStream RIS;Private StaticPipedOutputStream Ros; Public Static void Main(string[] args) throws Exception {Datagramsocket Sendds =NewDatagramsocket (); Datagramsocket RECVDS =NewDatagramsocket (12345);//Listening portsSIS =NewPipedInputStream (); SOS =NewPipedOutputStream (); Sis.connect (SOS); RIS =NewPipedInputStream (); Ros =NewPipedOutputStream (); Ris.connect (ROS);//Start send and receive threads NewThread (NewUDPRECV (Recvds,ros)). Start ();NewThread (NewUdpsend (sendds,sis)). Start (); System. out. println ("Hello myqwq!"); Init (); while(true) {byte[] buf =New byte[1024x768];intLen = Ris.read (BUF); Trecv.append (NewString (BUF,0, Len) +"\ r \ n"); } } Public Static void Init() throws IOException {r =NewFrame ("MYQQ"); TRECV =NewTextArea ("", -, -, textarea.scrollbars_vertical_only); Tsend =NewTextArea ("", -, -, textarea.scrollbars_vertical_only); R.setbounds ( -, -, -, -); R.setlayout (NewFlowLayout ()); R.add (TRECV); R.add (Tsend);//frame Events Event(); R.setvisible (true);//Set the input box to the current focusTrecv.transferfocus (); } Public Static void Event() {R.addwindowlistener (NewWindowadapter () { Public void windowclosing(WindowEvent e) {System.exit (0); } }); Tsend.addkeylistener (NewKeyadapter () { Public void keypressed(KeyEvent e) {if(E.getkeycode () ==keyevent.vk_enter)//Enter to send data{E.consume ();Try{Sos.write (Tsend.gettext () +"\ r \ n"). GetBytes ()); Sos.flush ();//system.out.println (Tsend.gettext ());}Catch(Exception ex) {Throw NewRuntimeException ("IO Error"); } tsend.settext (""); } } }); }}
Compiling and packaging
To the file directory, you can also use the IDE to build the project
javac -d . MyQQ.javajar cvfm myqq.jar mainfest.txt myqq
Run effect
Run the packaged Myqq.jar directly: (because there is only one computer, the address is written in the broadcast address, can receive the proof program successfully sent and received the package)
Simple UDP communication Program in Java