Verwandte Lesung: Java Socket Chat Room -Programmierung (ii) Verwenden von Socket, um einzelne Chatraum zu implementieren
Es gibt bereits viele Beispiele für die Verwendung von Sockets, um Chat im Internet zu implementieren, aber ich habe viele von ihnen gesehen, und es gibt mehr oder weniger Probleme.
Hier werde ich ein relativ vollständiges Chat -Beispiel implementieren und die darin enthaltene Logik erläutern.
Da die Steckdose relativ groß ist, werde ich einige Artikel teilen, um ein relativ vollständiges Sockel -Beispiel zu schreiben.
Hier implementieren wir zunächst die einfachste Funktion der Server- und Client-Kommunikation und des Clients, um den Nachrichtenschub zu erkennen.
Zweck: Der Server stellt eine Verbindung mit dem Client her. Der Client kann Nachrichten an den Server senden, und der Server kann Nachrichten an den Client weitergeben.
1. Erstellen Sie einen Socket -Chat -Server mit Java
1. Socketurls bestimmt die IP -Adresse und die Portnummer
öffentliche Klasse Socketurls {// IP -Adresse öffentliche endgültige statische String ip = "192.168.1.110"; // Portnummer Public Final static int port = 8888;}2. Der Eingang zum Hauptprogramm
public class main {public static void main (String [] args) löst Ausnahme aus {neuer chatServer (). InitServer ();}}3. Bean Entity -Klasse
UserInfobean
public class main {public static void main (String [] args) löst Ausnahme aus {neuer chatServer (). InitServer ();}}Chat -Nachricht
öffentliche Klasse MessageBean erweitert userInfobean {private long messageId; // message idprivate long GroupId; // Gruppen -idprivate boolean isgoup; // Ob es sich um eine Gruppennachricht private int chustType; // Nachrichtentyp; 1, Text; 2, Bild; 3, Kurzvideo; 4, Datei, geografische Streichung; 6, Voice, Voice, Voice, Voice, Voice, Voice -Voice, Voice -Voice, Video -Aufruf -Inhalte. ERRORCODE; // Fehlercode // GET/SET -Methode} auslassen4. Chatserver Chat -Service, das wichtigste Programm
public class chatserver {// Socket Service Private statische ServerSocket -Server; public gson gson = new gson ();/*** Initialisieren von Socket Service*/public void Initserver () {try {// Erstellen Sie ein Serversocket, um Kundenanfragen auf Port 8080 Server = New Serversocket (Socketurls); Automatisch generierter Catch blocke.printstacktrace ();}}/*** Nachrichtenverwaltung erstellen und empfangen weiterhin Nachrichten*/private void createmessage () {try {system.out.println warten ("Warten auf Benutzerzugriff:"); // Verwenden Sie Akzeptieren (), um auf Client-Anfragen zu blockieren. Socket.getPort ()); // Öffnen Sie einen untergeordneten Thread, um auf einen anderen Socket zu warten, um einem neuen Thread (New Runnable () {public void run () {CreateMessage ();}}). InputStreamReader (Socket.GetInputStream ()); // Scanner Scanner = neuer Scanner (socket.getInputStream ()); neuer Thread (neu Runnable () {public void run () {try {String Buffer; while (true) {// bufperedReader aus dem Console Strin = New Puffer = New Puffer) (new InputStreamReader aus dem console strin = new). Strin.readline (); // Weil Readline eine neue Linie als Endpunkt verwendet, fügen Sie am Ende einen Newline-Puffer hinzu += "/n";output.Write(buffer.getBytes("utf-8");// Data output.flush (); blocke.printstacktrace ();}}}). start (); // Lesen Sie die gesendete Serverinformation String line NULL) {MessageBean messageBean = gson.fromjson (Zeile, messageBean.class); System.out.println ("Benutzer:" + messageBean.getUnername (); System.out.println ("Inhalt:" + messageBean.getContent (); blocke.printstacktrace (); System.out.println ("Fehler:" + e.getMessage ());}}}2. Die Android -Seite wird als mobile Seite verwendet, um eine Verbindung zum Server herzustellen
1. Appliacction instanziiert einen globalen Chat -Service
öffentliche Klasse Chatappliaction erweitert Anwendung {public static chatserver chatserver; public static userInfobean userInfobean; @Overridepublic void oncreate () {Super.oncreate ();}}2. Die IP -Adresse und die Portnummer stimmen mit dem Server überein
3. Die Chat -Stärke ist die gleiche wie die Serverseite
4. XML Layout. Melden Sie sich an, Chat
1. Anmelden
<? xml Version = "1.0" coding = "utf-8"?> <linearlayout xmlns: android = "http://schemas.android.com/apk/res/android" Android: layout_width = "match_parent" Android: layout_Height = "Match_PA Rent "Android: Orientation =" Vertical "> <editTextandroid: id ="@+id/chat_name_text "Android: layout_width =" match_parent "Android: Layou T_Height = "Wrap_Content" Android: Hint = "Benutzername" Android: text = "admin"/> <editTextAndroid: id = "@+id/chat_pwd_text" android: layout_width = " Match_Parent "Android: layout_Height =" Wrap_Content "Android: Hint =" Passwort "Android: text =" 123123123a "Android: inputType =" numberpassword "" /> <Buttonandroid: id = "@+id/chat_login_btn" android: layout_width = "match_parent" Android: layout_Height = "Wrap_Content" Android: Hint = "Login"/> </linearlayout>
2. Chat
<? xml Version = "1.0" coding = "utf-8"?> <linearlayout xmlns: android = "http://schemas.android.com/apk/res/android" xmlns: tools = "http://schemas.android.com/tools" android: layout_width = "matchelentation" android: layout_height = " "Vertikale" Tools: context = ". Aktivität.MainActivity"> <ScrollViewandroid: id = "@+id/scrollview" Android: layout_width = "match_parent" Android: layout_Height = "0dp" Android: Layout_Weight = "0.9"> <linearlayrayr oid: id = "@+id/chat_ly" android: layout_width = "match_parent" android: layout_height = "match_parent" android: orientation = "vertical"> </linearlayout> </scrollview> <linearlayoutandroid: layout_width = "Match_par Ent "Android: layout_Height =" Wrap_Content "Android: Orientation =" Horizontal "> <editTextAndroid: id ="@+id/chat_et "Android: layout_width =" 0dp "Android: Layout_Height =" Match_Parent "Android: Layout_Weight =" 0.8 "0.8" 0.8 ". /><Buttonandroid:id="@+id/send_btn"android:Layout_width="0dp"android:Layout_Height="match_parent"android:Layout_weight="0.2"android:text="send "/> </linearlayout> </linearlayout>
5. LoginActivity Login
LoginActivity der öffentlichen Klasse erweitert AppCompatActivity {private editText chat_name_text, chat_pwd_text; private button chat_login_btn; @OverrideProtected void Oncreate (bündelte SavedInstancestate) {super.oncreate (SavedInstancEtate); (EditText) findViewById(R.id.chat_name_text);chat_pwd_text = (EditText) findViewById(R.id.chat_pwd_text);chat_login_btn = (Button) findViewById(R.id.chat_login_btn);chat_login_btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onclick (view v) {if (getLogin (chat_name_text.getText (). ToString (). Trim (), chat_pwd_text.getText (). ToString (). Trim ()) {GetChatserver (); MainActivity.class); startActivity (intent); finde ();}});} private boolean getLogin (String -Name, String pwd) {if (Textutils.isempty (name) || textils.isempty (pwd)) return; false;} private void getChatserver () {chatappliaction.chatserver = new chatServer ();}}6. MainActivity Chat
public class MainActivity extends AppCompatActivity {private LinearLayout chat_ly;private TextView left_text, right_view;private EditText chat_et;private Button send_btn;private ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.layoutParams.wrap_content);@überschreibete void onCreate (Bündel savedInstancestate) {Super.oncreate (savedInstancestate); setContentView (r.layout.Activity_main); chat_ly = (linearLayout) findView (R.Id.Ch.Ch.Ch.Chat_tyly); Chat_et = (actview) (R.Id.Ch.Ch.Ch.Chat_tel); (bearbeitet) (agg. findViewById (r.id.chat_et); send_btn = (button) findViewById (r.id.send_btn); send_btn.setonclickListener (neue Ansicht.onclickListener () {@Overridepublic void onclick (Ansicht v) {Chatappliaction.chatserver.sendMessage (chat_et.getText (). ToString (). TRIM ()); CHAT_LY.ADDVIEW (initrightView (chat_et.getText (). ToString (). Trim ()); {@Overridepublic void Handlemessage (Message MSG) {if (msg.what == 1) {// Nach dem Zurücksenden der Nachricht uichat_ly.addView (initleftView (msg.obj.toString ()); MessageContent) {right_view = new textView (this); right_view.setLayoutParams (layoutParams); right_view.setGravity (view.focus_right); right_view.setText (messageContent); MessageContent) {Left_text = New TextView (this); Left_text.setLayoutParams (LayoutParams); Left_text.setGravity (Ansicht.focus_Left); Left_text.setText (MessageContent); return links_text;}}}}}}}}}}}}}}}}}7. Chatserver Chat -Logik, die wichtigste
Public Class Chatserver {Private Socket Socket; Warteschlange, verwendet, um Nachrichten zu übergeben. MessageBean (); MessageBean.SetUserId (1); MessageBean.SetMessageId (1); MessageBean.setchattype (1); null) {message message = handler.obtainMessage (); message = gson.tojson (MessageBean);/*** Weil die Readline () auf dem Server das Lesen blockiert* Wenn er das neue Zeilenzeichen nicht lesen kann oder der Ausgabestream endet, wird er dort blockiert. Newline -Druckausgabe.flush (); // Aktualisieren Sie den Ausgabestream so, dass der Server die Zeichenfolge sofort empfängt. Client -Anforderung an den nativen Port 8080 Socket = neuer Socket (Socketurls.IP, Socketurls.Port); // Erhalten Sie den Eingabestream aus dem Socket -Objekt und konstruieren Sie den entsprechenden BufferedReader -Objekt Printwriter = new printwriter (SocketPutSputStream (); input = socket.getInputstream (). DataOutputStream (Socket.GetOutputStream ()); // Informationen aus dem Client BufferedReader bff = neuer BufferedReader (neuer InputStreamReader (input)); // Lesen Sie die gesendete Serverinformationslinie; " + line); message message = handler.obtainMessage (); message.obj = line; message.what = 1; Handler.sendMessage (message);} if (socket == null) break;} output.CLOSE (); // Socket -Stream -Eingabe schließen. {e.printstacktrace (); log.e ("test", "Fehler:" + e.toString ());}}}). start ();}}}Übrigens wurde der gesamte Code abgeschlossen.
Diese Demo kann es dem Mobiltelefon ermöglichen, Nachrichten an den Server und den Server an das Mobiltelefon zu senden.
Diese Demo kann als Push -Funktion angesehen werden, aber der eigentliche Push ist nicht so einfach. Als Anfänger von Sockets können Sie die Ideen der Socket -Programmierung sehen.
Das obige ist die vom Editor (1) vorgestellte Java -Socket -Chatroom -Programmierung, mit der Socket zum Implementieren von Chat -Nachrichten -Push verwendet wird. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!