java實現socket伺服器與用戶端的通訊,此處只用範例程式碼說明
伺服器端代碼
主程式:
package netWork;import java.io.IOException;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class Service {public static int i = 1;public static void main(String[] args) throws IOException {// TODO Auto-generated method stubServerSocket serverSocket = new ServerSocket(5202);Socket socket = null;while(true){socket = serverSocket.accept();System.out.println("用戶端"+(i++)+"串連成功");Runnable runnable = new MyRunnable(socket);thread thread = new Thread(runnable);thread.start();}}
多線程:
package netWork;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class MyRunnable implements Runnable{private Socket socket;String [] advices={"多吃水果","少吃垃圾食品","早睡早起","多運動","多出去走走","出去玩玩啊"};public MyRunnable(Socket socket) {// TODO Auto-generated constructor stubthis.socket = socket;}@Overridepublic void run() {// TODO Auto-generated method stubString advice = getAdvice();try {InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream(),"UTF-8");BufferedReader bufferedInputStream = new BufferedReader(inputStreamReader);PrintWriter printWriter = new PrintWriter(socket.getOutputStream());//while(true){String mString = bufferedInputStream.readLine();System.out.println("這是來自用戶端資訊: "+mString);printWriter.println("這是來自伺服器的資訊: "+advice);printWriter.flush();//}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}private String getAdvice() {// TODO Auto-generated method stubint random = (int)(Math.random()*advices.length);return advices[random];}}
用戶端代碼
package com.myfirstprac;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class Cdateinfo {public void go() throws UnknownHostException, IOException {Socket socket = new Socket("127.0.0.1", 5202);PrintWriter printWriter = new PrintWriter(socket.getOutputStream());InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream(),"UTF-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);printWriter.println("hh,我是用戶端");printWriter.flush();String msg = bufferedReader.readLine();System.out.println(msg);printWriter.close();socket.close();}public static void main(String[] args) throws UnknownHostException, IOException {// TODO Auto-generated method stubCdateinfo cdateinfo = new Cdateinfo();cdateinfo.go();}}