import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class SckServer {
private static final int PORT = 9999;// 端口
private List mList = new ArrayList();
private ServerSocket server = null;
private ExecutorService mExecutorService = null; // thread pool
public static void main(String[] args) {
new SckServer();
}
public SckServer() {
try {
// 创建服务器端socket并绑定到一个端口上
server = new ServerSocket(PORT);
// 使用连接池
mExecutorService = Executors.newCachedThreadPool();
System.out.print("server start ...");
Socket client = null;
// 接字设置监听模式等待连接请求
while (true) {
client = server.accept();
mList.add(client);
// 接受连接请求后进行通信
mExecutorService.execute(new Service(client));
}
} catch (Exception e) {
e.printStackTrace();
}
}
class Service implements Runnable {
private Socket socket;
private BufferedReader in = null;
private String msg = "";
public Service(Socket socket) {
this.socket = socket;
try {
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
msg = "user" this.socket.getInetAddress() "come toal:"
mList.size();
this.sendmsg();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
while (true) {
if ((msg = in.readLine()) != null) {
if (msg.equals("exit")) {
System.out.println("ssssssss");
mList.remove(socket);
in.close();
msg = "user:" socket.getInetAddress()
"exit total:" mList.size();
socket.close();
this.sendmsg();
break;
} else {
msg = socket.getInetAddress() ":" msg;
this.sendmsg();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendmsg() {
System.out.println(msg);
int num = mList.size();
for (int index = 0; index < num; index ) {
Socket mSocket = mList.get(index);
PrintWriter pout = null;
try {
pout = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(mSocket.getOutputStream())),
true);
pout.println(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
资源下载此资源下载价格为3D币,请先登录
资源文件列表
socket编程/SCK/.classpath , 475
socket编程/SCK/.project , 839
socket编程/SCK/.settings/org.eclipse.jdt.core.prefs , 177
socket编程/SCK/AndroidManifest.xml , 942
socket编程/SCK/bin/AndroidManifest.xml , 942
socket编程/SCK/bin/classes/com/lyh/sck/BuildConfig.class , 331
socket编程/SCK/bin/classes/com/lyh/sck/MainActivity$1.class , 1780
socket编程/SCK/bin/classes/com/lyh/sck/MainActivity$2$1.class , 1543
socket编程/SCK/bin/classes/com/lyh/sck/MainActivity$2.class , 2009
socket编程/SCK/bin/classes/com/lyh/sck/MainActivity$3.class , 2179
socket编程/SCK/bin/classes/com/lyh/sck/MainActivity$4.class , 819
socket编程/SCK/bin/classes/com/lyh/sck/MainActivity.class , 3884
socket编程/SCK/bin/classes/com/lyh/sck/R$attr.class , 319
socket编程/SCK/bin/classes/com/lyh/sck/R$dimen.class , 440
socket编程/SCK/bin/classes/com/lyh/sck/R$drawable.class , 386
socket编程/SCK/bin/classes/com/lyh/sck/R$id.class , 470
socket编程/SCK/bin/classes/com/lyh/sck/R$layout.class , 382
socket编程/SCK/bin/classes/com/lyh/sck/R$menu.class , 367
socket编程/SCK/bin/classes/com/lyh/sck/R$string.class , 451
socket编程/SCK/bin/classes/com/lyh/sck/R$style.class , 410
socket编程/SCK/bin/classes/com/lyh/sck/R.class , 603
socket编程/SCK/bin/classes.dex , 563448
socket编程/SCK/bin/dexedLibs/android-support-v4-de7855b246fd572ebcd706d49a1375dd.jar , 189231
socket编程/SCK/bin/dexedLibs/annotations-dbd74ff1c50abcdd5ed68b0bc57e94a3.jar , 943
socket编程/SCK/bin/jarlist.cache , 120
socket编程/SCK/bin/res/drawable-hdpi/ic_launcher.png , 5964
socket编程/SCK/bin/res/drawable-mdpi/ic_launcher.png , 3112
socket编程/SCK/bin/res/drawable-xhdpi/ic_launcher.png , 9355
socket编程/SCK/bin/res/drawable-xxhdpi/ic_launcher.png , 17889
socket编程/SCK/bin/resources.ap_ , 40828
socket编程/SCK/bin/SCK.apk , 236494
socket编程/SCK/gen/com/lyh/sck/BuildConfig.java , 153
socket编程/SCK/gen/com/lyh/sck/R.java , 2212
socket编程/SCK/ic_launcher-web.png , 51394
socket编程/SCK/libs/android-support-v4.jar , 484258
socket编程/SCK/proguard-project.txt , 781
socket编程/SCK/project.properties , 563
socket编程/SCK/res/drawable-hdpi/ic_launcher.png , 7658
socket编程/SCK/res/drawable-mdpi/ic_launcher.png , 3777
socket编程/SCK/res/drawable-xhdpi/ic_launcher.png , 12516
socket编程/SCK/res/drawable-xxhdpi/ic_launcher.png , 24777
socket编程/SCK/res/layout/activity_main.xml , 815
socket编程/SCK/res/menu/main.xml , 225
socket编程/SCK/res/values/dimens.xml , 220
socket编程/SCK/res/values/strings.xml , 220
socket编程/SCK/res/values/styles.xml , 697
socket编程/SCK/res/values-sw600dp/dimens.xml , 203
socket编程/SCK/res/values-sw720dp-land/dimens.xml , 277
socket编程/SCK/src/com/lyh/sck/MainActivity.java , 3901
socket编程/SCKServer/.classpath , 301
socket编程/SCKServer/.project , 385
socket编程/SCKServer/.settings/org.eclipse.jdt.core.prefs , 598
socket编程/SCKServer/bin/SckServer$Service.class , 2885
socket编程/SCKServer/bin/SckServer.class , 1756
socket编程/SCKServer/src/SckServer.java , 2774