1. 程式人生 > >12.5-全棧Java筆記:Java網絡編程(三)

12.5-全棧Java筆記:Java網絡編程(三)

java

上節回顧:在學習了Socket在建立客戶端和服務器單項通訊中,分別創建獨立的Socket,並通過Socket的屬性。

那麽如何將兩個Socket進行連接,從而達到客戶端和服務器之間建立輸入輸出流進行通信呢?在上節中我們已經講到,TCP/IP套接字是最可靠的雙向流協議,使用TCP/IP可以發送任意數量的數據。如果發送方和接收方計算機確定好端口,他們就可以通信了,其中的端口用套接字表示。

【示例1】客戶端與服務器端雙向交流的Socket之服務器端

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class Server {

public static void main(String[] args) throws Exception {

ServerSocket server=new ServerSocket(8888);

Socket socket=server.accept();

BufferedReader in=new BufferedReader(new

InputStreamReader(socket.getInputStream()));

BufferedWriter out=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

while(true){

String str=in.readLine();

System.out

.println("客戶端說:"+str);

String str2 = "";

str2 = br.readLine(); //讀到\n為止,因此一定要輸入換行符!

out.write(str2+"\n");

out.flush();

if(str.equals("end"))

break;

}

in.close();

out.close();

socket.close();

}

}

【示例2】客戶端與服務器端雙向交流的Socket之客戶端

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.InetAddress;

import java.net.Socket;

import java.net.UnknownHostException;

public class Client {

static Socket server;

public static void main(String[] args) {

try {

server = new Socket(InetAddress.getLocalHost(), 8888);

BufferedReader in = new BufferedReader(new InputStreamReader(

server.getInputStream()));

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(

server.getOutputStream()));

BufferedReader wt = new BufferedReader(new InputStreamReader(

System.in));

while (true) {

String str = wt.readLine();

out.write(str + "\n");

out.flush();

if (str.equals("end")) {

break;

}

System.out.println("服務器發說:" + in.readLine());

}

out.close();

in.close();

wt.close();

server.close();

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

學習以上程序後,會發現我們必須按照安排好的順序,服務器和客戶端一問一答!不夠靈活!!那麽如何用多線程來實現更加靈活的雙向通訊呢?下節我們繼續~





「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數碼、航天院某所研發中心從事軟件設計及研發工作,從小白逐漸做到工程師、高級工程師、架構師。精通Java平臺軟件開發,精通JAVAEE,熟悉各種流行開發框架。


筆記包含從淺入深的六大部分:

A-Java入門階段

B-數據庫從入門到精通

C-手刃移動前端和Web前端

D-J2EE從了解到實戰

E-Java高級框架精解

F-Linux和Hadoop




本文出自 “12931675” 博客,請務必保留此出處http://12941675.blog.51cto.com/12931675/1946247

12.5-全棧Java筆記:Java網絡編程(三)