简单的MyServer .java
- package com.cn.socket;
- import java.io.*;
- import java.net.*;
- public class MyServer
- {
- public static void main (String[] args) throws IOException
- {
- ServerSocket server=new ServerSocket(4567);
- Socket client=server.accept();
- BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
- PrintWriter out=new PrintWriter(client.getOutputStream());
- while(true)
- {
- String str=in.readLine();
- System.out.println(str);
- out.println("你 说: " + str + "/n");
- out.flush();
- if(str.equals("end"))
- break;
- }
- client.close();
- }
- }
这个服务器端只能连接一段时间后自动停止。
服务器端代码二:
- package com.cn.socket;
- import java.io.IOException;
- import java.net.*;
- import java.util.concurrent.*;
- public class MultiThreadServer {
- private int port=4567;
- private ServerSocket serverSocket;
- private ExecutorService executorService;//线程池
- private final int POOL_SIZE=10;//单个CPU线程池大小
- public MultiThreadServer() throws IOException{
- serverSocket=new ServerSocket(port);
- //Runtime的availableProcessor()方法返回当前系统的CPU数目.
- executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);
- System.out.println("服务器启动");
- }
- public void service(){
- while(true){
- Socket socket=null;
- try {
- //接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
- socket=serverSocket.accept();
- executorService.execute(new Handler(socket));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- public static void main(String[] args) throws IOException {
- new MultiThreadServer().service();
- }
- }
- package com.cn.socket;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.io.PrintWriter;
- import java.net.*;
- public class Handler implements Runnable{
- private Socket socket;
- public Handler(Socket socket){
- this.socket=socket;
- }
- private PrintWriter getWriter(Socket socket) throws IOException{
- OutputStream socketOut=socket.getOutputStream();
- return new PrintWriter(socketOut,true);
- }
- private BufferedReader getReader(Socket socket) throws IOException{
- InputStream socketIn=socket.getInputStream();
- return new BufferedReader(new InputStreamReader(socketIn));
- }
- public String echo(String msg){
- return "echo:"+msg;
- }
- public void run(){
- try {
- System.out.println("New connection accepted "+socket.getInetAddress()+":"+socket.getPort());
- BufferedReader br=getReader(socket);
- PrintWriter pw=getWriter(socket);
- String msg=null;
- while((msg=br.readLine())!=null){
- System.out.println(msg);
- pw.println(echo(msg));
- if(msg.equals("bye"))
- break;
- }
- } catch (IOException e) {
- e.printStackTrace();
- }finally{
- try {
- if(socket!=null)
- socket.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
服务器二建立了线程数量,并且可以不断进行端口连接。
这两中服务器选其一就ok。
注:我得crossdomain.xml文件内容:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>