Java Socket 編程實例學習

1、上代碼

1.1 客戶端程序Myclient

package com.yuan.testcs;

import java.awt.datatransfer.StringSelection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Myclient {
public static void main(String args[]){
	
	try{
		Socket socket=new Socket("127.0.0.1",5678); //請求鏈接server 端
		//經過鏈接獲取server上面的輸入輸出流
		PrintWriter out=new PrintWriter(socket.getOutputStream());
		BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
		//建立標準輸入流,從鍵盤接收數據
		BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
		//從鍵盤輸入讀取一行,發送到server端,當用戶輸入byte時候結束鏈接
		String s;
		do{
			s=sin.readLine();
			out.println(s);
			out.flush();
			if(!s.equals("bye")){
			System.out.println("@server response:"+in.readLine());	
				
			}else {
				System.out.println("The connection is closed");
			}
			
		}while(!s.equals("bye"));
		out.close();
		in.close();
		socket.close();
		
	}catch (Exception e) {
		System.out.println("Error:"+e);
	}
	
	
}
}

1.2 Server端程序,MyServer

package com.yuan.testcs;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer {
	public static void main(String[] args) {
	try {
		//創建server socket 而且等待鏈接
		ServerSocket server=new ServerSocket(5678);
		Socket socket=server.accept();
		//鏈接創建 經過Socket獲取鏈接的輸入和輸出流
		BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
		PrintWriter out=new PrintWriter(socket.getOutputStream());
		//建立標準輸入流,從鍵盤輸入數據
		BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
		//先讀取client 發送的數據,而後從標準輸入讀取數據發送給client
		//當收到 bye 字符關閉鏈接
		String s;
		while(!(s=in.readLine()).equals("bye")){
			System.out.println("#Received from client:"+s);
			out.println(sin.readLine());
			out.flush();
		}
		System.out.println("The connection is closing");
		out.close();
		in.close();
		socket.close();
		server.close();
	} catch (Exception e) {
		// TODO: handle exception
		System.out.println("Error:"+e);
	}

	}

}

1.3 問題解決

1.3.1 Javac 命令不是本地命令。

由於是在本地測試的,因此須要開啓兩個Dos 客戶端。另外程序是用Eclipse寫的,因此考慮直接用Java 的命令來執行。java

可是在用Javac 編譯的時候提示,不是本地命令,可是Java 命令能夠運行,因此考慮是參數配置的問題。最後發現是JAVA_HOME 裏面的jdk 路徑寫的不對致使,以前安裝了jre,最後安裝了jdk 。socket

1.3.2 Java 運行程序的時候總是提示找不到 class

但是事實上class文件已經有了。因而查看了博文:http://blog.csdn.net/harryweasley/article/details/45559129/測試

說是由於個人Java文件放在包裏面,因此找不到類。正確的方法是:先用Javac -d .  MyServer.java 這樣編譯下來就帶有包的結構了。而後再用Java 包名稱.MyServer 來運行,MyClient也是同樣的操做。spa

1.4 查看運行結果 

相關文章
相關標籤/搜索