Java中的socket编程

来源:互联网 发布:北京申奥成功 知乎 编辑:程序博客网 时间:2024/06/05 21:12

客户端编写

开启Socket

如果在客户端,你需要写下如下的代码就可以打开一个socket。

import java.io.*;
import java.net.*;
public class MultiTalkClient
{
    public static void main(String[] args) throws IOException
 {
        Socket client = null;
        PrintWriter out = null;
        BufferedReader in = null;
        try {
            client = new Socket("127.0.0.1", 4444);
            out = new PrintWriter(client.getOutputStream(), true); //auto flush
            in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: 127.0.0.1.");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: 127.0.0.1.");
            System.exit(1);
        }
        //从标准输入流(键盘)中获取信息
 BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
       
 String fromServer, fromUser;
 boolean sbye = false;
 boolean ubye = false;
 System.out.print("Client input:");
 fromUser = stdIn.readLine();
        while( true ) 
 {
  if( ubye == false )
  {
   out.println(fromUser);
   out.flush();
   //System.out.println("Client: " + fromUser);
   if (fromUser.equals("Bye."))
    ubye = true;
  }
  if( sbye == false )
  {
   fromServer = in.readLine();
   System.out.println("from Server: " + fromServer);
   if (fromServer.equals("Bye."))
    sbye = true;
  }
  if( ubye == false )
  {
   System.out.print("Client input:");
   fromUser = stdIn.readLine();
  }
  if( ubye == true && sbye == true )
   break;
        }
        out.close();
        in.close();
        stdIn.close();
        client.close();
    }
}

关闭IO对象

类似文件IO,在读写数据完成后,我们需要对IO对象进行关闭,以确保资源的正确释放。

服务器端编写

打开服务器端的socket

import java.net.*;
import java.io.*;
public class MultiTalkServer
{
    public static void main(String[] args) throws IOException
 {
        ServerSocket serverSocket = null;
        boolean listening = true;
 int clientNumber = 0;
        try {
            serverSocket = new ServerSocket(4444);
        } catch (IOException e)
 {
            System.err.println("Could not listen on port: 4444.");
            System.exit(-1);
        }
        while (listening)
 {
  Socket socket;
  socket = serverSocket.accept();  //程序将在此等候客户端的连接
  clientNumber++;
  new MultiTalkServerThread(socket, clientNumber).start();
 }
        serverSocket.close();
    }
}
class MultiTalkServerThread extends Thread
{
 private Socket socket = null;
 private int clientNumber;
 public MultiTalkServerThread(Socket socket, int clientNumber)
 {
  super("MultiTalkServerThread");
  this.socket = socket;
  this.clientNumber = clientNumber;
  System.out.println("Accept Client" + clientNumber);
 }
 public void run()
 {
  try {
   PrintWriter out = new PrintWriter(socket.getOutputStream(), true);  //auto flush
   BufferedReader in = new BufferedReader(
      new InputStreamReader(
      socket.getInputStream()));
   BufferedReader sin = new BufferedReader( new InputStreamReader( System.in ) );
   String sinputLine, inputLine;
   boolean sinbye = false;
   boolean inbye = false;
          
   inputLine = in.readLine();
   System.out.println( "from Client" + clientNumber + ": " + inputLine );
   while( true )
   {
    if(inputLine.equals("Bye."))
    {
     inbye = true;
     sinbye = true;
     sinputLine = "Bye.";
     out.println(sinputLine);
     out.flush();
     System.out.println("Server: " + "Reply to client " + clientNumber +" : " + sinputLine);
    }
    else
    {
     sinputLine = "Reply to client " + clientNumber +" : " + inputLine;
     out.println(sinputLine);
     out.flush();
     System.out.println("Server: " + sinputLine);
    }
    if( sinbye == true && inbye == true )
     break;
    if( inbye == false )
    {
     inputLine = in.readLine();
     System.out.println( "form Client " + clientNumber + ": " + inputLine );
    }
   }
   out.close();
   in.close();
   socket.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
    }
}

总结

进行客户端-服务器端编程还是比较有趣的,同时在Java中进行socket编程要比其他语言(如C)要简单快速编写。


原创粉丝点击