把困難踩在腳下

          迎難而上

           

          初寫TCP通信程序

          Tcp通信協(xié)議是基于OSI標(biāo)準(zhǔn)協(xié)議,有應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、物理層+數(shù)據(jù)鏈路層。TCP采用三次握手,所謂“三次握手”就是A向B發(fā)出連接請求,B向A發(fā)出收到消息,然后A向B發(fā)出收到消息。這樣可以提高通信連接的可靠性。TCP通信可以用Socket套接字實(shí)現(xiàn),Socket正如它的英文名稱“插座”一樣,兩臺電腦要想實(shí)現(xiàn)通信,每臺電腦就是一個插座,用一根虛擬的導(dǎo)線將兩個插座連接一起,就可以實(shí)現(xiàn)通信。

          下面看程序:

          先看服務(wù)器端:

           

          package com.dr.me; 

          import java.io.BufferedReader;
          import java.io.IOException;
          import java.io.InputStreamReader;
          import java.io.PrintStream;
          import java.net.ServerSocket;
          import java.net.Socket; 

          public class MyServer {
              
          public static void main(String args[]) throws IOException
              
          {
                  
          //創(chuàng)建一個ServerSocket對象實(shí)例
                  ServerSocket  ss=new ServerSocket(1526);
                  
          //創(chuàng)建一個Socket實(shí)例對象,用來接受客戶端傳過來的Socket
                  Socket client=null;
                  System.out.println(
          "等待客戶端的連接、、、、、");
                  
          //程序運(yùn)行到此就會阻塞,除非有客戶端連接
                  client=ss.accept();
                  System.out.println(
          "有客戶連接上了---");
                  
          //創(chuàng)建和客戶端的通信通道
                  BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
                  PrintStream out
          =new PrintStream(client.getOutputStream());
                  
          //向客戶端輸出信息
                  out.println("Hello how are you?");
                  
          //關(guān)閉輸入輸出流
                  in.close();
                  out.close();
              }
           

          }
           

          在此程序中首先創(chuàng)建了一個ServerSocket對象,并指明了它的端口,客戶端通過IP和這個端口和服務(wù)器端進(jìn)行連接。程序運(yùn)行到此:

          client=ss.accept();就不在往下運(yùn)行直到有客戶端連接上,在繼續(xù)往下執(zhí)行。通過   BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
                  PrintStream out=new PrintStream(client.getOutputStream());
          這條語句就和客戶端建立了一根虛擬的通道。

          看客戶端程序:

           

          package com.dr.me; 

          import java.io.BufferedReader;
          import java.io.IOException;
          import java.io.InputStreamReader;
          import java.net.Socket;
          import java.net.UnknownHostException; 

          public class MyClient {
              
          public static void main(String args[]) throws UnknownHostException, IOException
              
          {
                  
          //創(chuàng)建Socket實(shí)例對象
                  Socket client=new Socket("LocalHost",1526);
                  
          //創(chuàng)建String對象用來盛放從服務(wù)器端傳過來的信息,起一個緩沖作用
                  String str=null;
                  
          //和服務(wù)器端建立通信連接
                  BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
                  
          //讀取服務(wù)器端發(fā)過來的信息放在String對象中
                  str=in.readLine();
                  
          //把信息輸出到控制臺上
                  System.out.println(str);
              }
           

          }
           

          客戶端程序:通過

          Socket client=new Socket("LocalHost",1526);

          新建一個Socket對象,并指明了要向哪臺電腦建立連接及該電腦的端口,“LocalHost”是本臺電腦的IP,也可以寫成“127.0.0.1”,如果和其他電腦連接則改為那臺電腦的IP。端口號一定要和服務(wù)器端的客戶端一致,否則出現(xiàn)異常。

          運(yùn)行時首先啟動服務(wù)器端程序,然后再啟動客戶端程序。

          運(yùn)行結(jié)果:

          服務(wù)器端控制臺顯示:

          啟動服務(wù)器端顯示:

          1

          客戶端連接后顯示:

          3

          客戶端控制臺顯示:

          2

          這個程序只是簡單說明了一下TCP協(xié)議,還有很多東西沒有寫出來,有不對的地方希望大家批評指正,沒時間了我還要上課,先寫到這吧。

          posted on 2010-11-12 09:30 馮魁 閱讀(268) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計

          公告

          快樂每一天!

          Everything is an object!

          常用鏈接

          留言簿(2)

          隨筆檔案

          學(xué)習(xí)網(wǎng)站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 安庆市| 科技| 民丰县| 西昌市| 黄浦区| 佛山市| 根河市| 保康县| 横山县| 桦川县| 方城县| 罗山县| 渝中区| 台中市| 牟定县| 英德市| 饶平县| 弋阳县| 永嘉县| 涟水县| 喀什市| 梓潼县| 文成县| 民乐县| 休宁县| 新宾| 新密市| 沁源县| 开平市| 静乐县| 江北区| 抚顺市| 县级市| 聂拉木县| 烟台市| 临高县| 布尔津县| 霍州市| 当涂县| 仙居县| 双鸭山市|