Writing a multithreaded Socket Server
This example demonstrates the creation of a multithreaded
socket server application. The server is currently a simple Echo Server, which
simply accepts what the client says and sends it back. The example demonstrates
the basic infrastructure for a true multithreaded server application and can be
directly enhanced to perform as any server application.
The EchoServer accepts multiple client connections and is
capable of serving them simultaneously. It uses a new thread to service every
new client, which allows it to accepts new clients even before all clients are
serviced. The server also identifies each client connection with a unique ID,
making it easy to identify clients if required.
The EchoServer only understands one command, “quit”. On
receiving this command, it quits the thread servicing the client and closes the
connections. Also worth noting are the various places where anetwork connection
could fail. All conditions are handled gracefully by EchoServer, thus making
sure that the server never leaves behind residual threads and that the client is
not capable of crashing the server.
|
|||||
| Example Code: | |||||
| |||||
Demonstration: | |||||
|
2012년 1월 5일 목요일
Writing a multithreaded Socket Server
출처 : http://www.javareference.com/jrexamples/viewexample.jsp?id=47
2011년 12월 26일 월요일
Android LocalSocket / LocalServerSocket sample code
출처 : http://all4dev.blogspot.com/2009/02/android-localsocket-localserversocket.html
Platforms: Android SDK 1.0 (Eclipse 3.4.1 + ADT 0.8.0)
Add one button into your layout (main.xml):
And this simple code for your activity
Wednesday, February 18, 2009
Android LocalSocket / LocalServerSocket sample code
Abstract: This short code sample demonstrates how one can to use LocalSocket (LocalServerSocket) in Android SDK.
Platforms: Android SDK 1.0 (Eclipse 3.4.1 + ADT 0.8.0)
Add one button into your layout (main.xml):
<Button android:id="@+id/send_1_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="send 1 request"/>
And this simple code for your activity
import java.io.IOException; import java.io.InputStream; import android.app.Activity; import android.net.LocalServerSocket; import android.net.LocalSocket; import android.net.LocalSocketAddress; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; /** * * @author Denis Migol * */ public class DemoActivity extends Activity { public static String SOCKET_ADDRESS = "your.local.socket.address"; // background threads use this Handler to post messages to // the main application thread private final Handler handler = new Handler(); public class NotificationRunnable implements Runnable { private String message = null; public void run() { if (message != null && message.length() > 0) { showNotification(message); } } /** * @param message the message to set */ public void setMessage(String message) { this.message = message; } } // post this to the Handler when the background thread notifies private final NotificationRunnable notificationRunnable = new NotificationRunnable(); public void showNotification(String message) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); } class SocketListener extends Thread { private Handler handler = null; private NotificationRunnable runnable = null; public SocketListener(Handler handler, NotificationRunnable runnable) { this.handler = handler; this.runnable = runnable; this.handler.post(this.runnable); } /** * Show UI notification. * @param message */ private void showMessage(String message) { this.runnable.setMessage(message); this.handler.post(this.runnable); } @Override public void run() { //showMessage("DEMO: SocketListener started!"); try { LocalServerSocket server = new LocalServerSocket(SOCKET_ADDRESS); while (true) { LocalSocket receiver = server.accept(); if (receiver != null) { InputStream input = receiver.getInputStream(); // simply for java.util.ArrayList int readed = input.read(); int size = 0; int capacity = 0; byte[] bytes = new byte[capacity]; // reading while (readed != -1) { // java.util.ArrayList.Add(E e); capacity = (capacity * 3)/2 + 1; //bytes = Arrays.copyOf(bytes, capacity); byte[] copy = new byte[capacity]; System.arraycopy(bytes, 0, copy, 0, bytes.length); bytes = copy; bytes[size++] = (byte)readed; // read next byte readed = input.read(); } showMessage(new String(bytes, 0, size)); } } } catch (IOException e) { Log.e(getClass().getName(), e.getMessage()); } } } public static void writeSocket(String message) throws IOException { LocalSocket sender = new LocalSocket(); sender.connect(new LocalSocketAddress(SOCKET_ADDRESS)); sender.getOutputStream().write(message.getBytes()); sender.getOutputStream().close(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); new SocketListener(this.handler, this.notificationRunnable).start(); Button send1 = (Button)findViewById(R.id.send_1_button); send1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try { writeSocket("hello"); } catch (IOException e) { Log.e(getClass().getName(), e.getMessage()); } } }); } }
피드 구독하기:
글 (Atom)