亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? java語言的socket編程.txt

?? 含有許多JAVA的技巧!
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
Java語言的Socket編程 
(加入日期:2001-8-23 點擊數(shù):1586)
【對此文發(fā)表評論】 【編程愛好者論壇】 【保存文章至硬盤】 【打印文章】 
 
徐迎曉 (上海大學(xué)計算中心25#) xyx@yc.shu.edu.cn
  
摘 要:本文介紹了Java語言的Socket編程,包括服務(wù)端和客戶端的編程方法,并提供了若干實例。

關(guān)鍵詞:Java, Socket, Server, Client, Internet

一、什么是Socket

Socket 接口是訪問 Internet 使用得最廣泛的方法。 如果你有一臺剛配好TCP/IP協(xié)議的主機,其IP地址是202.120.127.201, 此時在另一臺主機或同一臺主機上執(zhí)行ftp 202.120.127.201,顯然無法建立連接。因為“202.120.127.201”

這臺主機沒有運行FTP服務(wù)軟件。同樣, 在另一臺或同一臺主機上運行瀏覽軟件如Netscape,輸入“http://202.120.127.201”,也無法建立連接。現(xiàn)在,如果在這臺主機上運行一個FTP服務(wù)軟件(該軟件將打開一個Socket,并將其綁定到21端口),再在這臺主機上運行一個Web 服務(wù)軟件(該軟件將打開另一個Socket,并將其綁定到80端口)。這樣,在另一臺主機或同一臺主機上執(zhí)行ftp 202.120.127.201,F(xiàn)TP客戶軟件將通過21端口來呼叫主機上由FTP 服務(wù)軟件提供的Socket,與其建立連接并對話。而在netscape中輸入“http://202.120.127.201”時,將通過80端口來呼叫主機上由Web服務(wù)軟件提供的Socket,與其建立連接并對話。

在Internet上有很多這樣的主機,這些主機一般運行了多個服務(wù)軟件,同時提供幾種服務(wù)。每種服務(wù)都打開一個Socket,并綁定到一個端口上,不同的端口對應(yīng)于不同的服務(wù)。Socket正如其英文原意那樣,象一個多孔插座。一臺主機猶如布滿各種插座的房間,每個插座有一個編號,有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節(jié)目。 客戶軟件將插頭插到不同編號的插座,就可以得到不同的服務(wù)。

在Java語言中,提供了相應(yīng)的Socket編程方法。用Java既可以編寫服務(wù)端的程序,又可以編寫客戶端的程序。

二、編寫服務(wù)端的程序

Java中的ServerSocket類提供了服務(wù)端的Socket接口。為了使大家對編寫服務(wù)端程序有一個感性的認(rèn)識,這里提供一個模擬FTP服務(wù)器的服務(wù)軟件。 為了簡潔起見,該程序只提供了最簡單的建立FTP連接的功能。

該程序如下:

import java.io.*;

import java.net.*;

public class ftpserver{

public static void main(String args[])

{ try{ ServerSocket ftpserver = new ServerSocket(21);

Socket fs=ftpserver.accept();

PrintStream fs_out=new PrintStream(fs.getOutputStream());

DataInputStream fs_in=new DataInputStream(fs.getInputStream());

fs_out.println("Welcome to the test server");

System.out.println("got follow infor from client:"+fs_in.readLine());

fs_out.println("331 Please send Password");

System.out.println("got follow infor from client:"+fs_in.readLine());

fs_out.println("230 Login OK");

System.out.println("got follow infor from client:"+fs_in.readLine());

}

catch(Exception e)

{ System.out.println(e);

}

}

}

為了測試該程序,可以在一臺安裝了Windows 95并配置了TCP/IP協(xié)議的微機上進(jìn)行(不一定要連入Internet)。在該微機上安裝Java編譯軟件如JDK1.01 或JDK1.02(可在ftp://ftp.javasoft.com/pub/JDK-102-win32-x86.exe 下載),將上述程序存入文件ftpserver.java,執(zhí)行“javac ftpserver.java”將其編譯為字節(jié)碼文件ftpserver.class。這樣,只要在該微機上執(zhí)行“java ftpserver.class”以運行該Java程序,該微機便成為一個模擬的FTP服務(wù)器。

測試該模擬FTP服務(wù)器,既可以在另一臺聯(lián)網(wǎng)的微機上進(jìn)行, 也可以直接在該模擬FTP服務(wù)器上另開一個DOS窗口進(jìn)行。運行命令行形式的FTP客戶軟件, 如在Windows 95的DOS窗口執(zhí)行:ftp 202.120.127.201(如果你的Windows 95中配置TCP/IP協(xié)議時用的IP地址是其他值,需將這里的“202.120.127.201 ”改為相應(yīng)的值),便可以進(jìn)行對話。下圖是對話過程,其中帶下劃線的部分為用戶的輸入。

客戶端

C:\xyx\java\sock\bak\ftp>ftp 202.120.127.201

Connected to 202.120.127.201.

Welcome to the test server

User (202.120.127.201:(none)): anonymous

331 Please send Password

Password:xyx@yc.shu.edu.cn

230 Login OK

ftp> bye

模擬FTP服務(wù)器

C:\xyx\java\sock\bak\ftp>java ftpserver

got follow infor from client:USER anonymous

got follow infor from client:PASS xyx@yc.shu.edu.cn

got follow infor from client:QUIT

下面我們來看一看該模擬FTP服務(wù)器的編程方法。在上面的程序中, 關(guān)鍵部分是下面四句:

1. ServerSocket ftpserver = new ServerSocket(21);

2. Socket fs=ftpserver.accept();

3. PrintStream fs_out=new PrintStream(fs.getOutputStream());

4. DataInputStream fs_in=new DataInputStream(fs.getInputStream());

其中,第一句創(chuàng)建了一個服務(wù)端的Socket,并將其綁定到21端口。這樣,服務(wù)端的Socket將一直等待客戶端建立連接。這里的21端口是FTP服務(wù)慣用的端口,你也可以使用其他端口來提供自己的服務(wù)。第二句利用Java提供的方法accept()接收客戶端的連接。第三句和第四句則為分別建立的連接打開一個輸出和輸入流。這四句可以作為編寫服務(wù)端程序的一個范式,接下去的操作就是按照約定的協(xié)議對輸出和輸入流進(jìn)行讀寫操作了。

在上面的程序中,對輸出流fs_out用方法println("...")向客戶端發(fā)送字符串,對輸入流fs_in用方法readLine()獲得客戶端向服務(wù)端發(fā)送的字符串, 并用System.out.println("...")在服務(wù)器上顯示出來。

向客戶端發(fā)送信息和讀取客戶端發(fā)送來的信息必須按協(xié)議約定進(jìn)行,這樣,服務(wù)端和客戶端之間才能順利通訊。在上面的程序中,信息發(fā)送順序是這樣的:

1. 客戶端連接后,服務(wù)端向客戶端發(fā)送歡迎信息。這由程序中如下一行完成:

fs_out.println("Welcome to the test server");

2. 客戶端顯示服務(wù)端發(fā)送的信息,并提示用戶輸入帳號, 發(fā)送給服務(wù)端。在本例中,這由FTP客戶軟件完成。

3. 服務(wù)端接收客戶端提供的帳號,向客戶端發(fā)送結(jié)果碼331,并提示需要口令。這由程序中如下兩行完成::

System.out.println("got follow infor from client:"+fs_in.readLine());

fs_out.println("331 Please send Password");

4. 客戶端提示用戶輸入口令,并將口令發(fā)送給服務(wù)端。在本例中,這由FTP客戶軟件完成。

5. 服務(wù)端接收客戶端提供的口令,向客戶端發(fā)送結(jié)果碼230,并提示注冊成功。讀取客戶端發(fā)送命令。這由程序中如下兩行完成:

fs_out.println("230 Login OK");

System.out.println("got follow infor from client:"+fs_in.readLine());

從以上我們可以看出客戶端和服務(wù)端對話的簡單過程,在這里,我們省略了服務(wù)端對用戶及口令的檢驗以及根據(jù)客戶端輸入的不同命令執(zhí)行各種操作。事實上,在上面的例子中既可以看到服務(wù)端如何向客戶端發(fā)送信息,又可以看到服務(wù)端如何接收客戶端的信息。因此,只要搞清楚雙方對話的協(xié)議,便不難作出相應(yīng)的編程。

三、編寫客戶端的程序

在上面的程序中,我們借用了Windows 95本身提供的FTP 客戶軟件來測試我們的模擬FTP服務(wù)程序。現(xiàn)在,我們要自己編寫一個客戶端的程序。 我們先編寫一個簡單的服務(wù)端程序和客戶端程序,以理解服務(wù)端與客戶端的通訊及其編程。

為簡明起見, 我們使用一個自己定義的簡單協(xié)議:服務(wù)器使用一個空閑的端口8886,客戶端連接后:1. 服務(wù)端向客戶端發(fā)送一個信息;2. 客戶端讀取服務(wù)端的信息并顯示,再向服務(wù)端發(fā)送一個反饋信息;3.服務(wù)端讀取客戶端的反饋信息并顯示。

對應(yīng)于此協(xié)議,服務(wù)端的程序可如下:

import java.io.*;

import java.net.*;

public class server{

public static void main(String args[])

{ try { Server Socket server_1 = new Server Socket(8886);

Socket socket_s=server_1.accept();

Print Stream server_out=new Print Stream(socket_s.get Output Stream());

Data Input Stream server_in=new Data Input Stream(socket_s. getInputStream());

server_out.println("This is infor sent by server \r");

String s1=server_in.readLine();

System.out.println("Got follow infor from client:"+s1);

}

catch(Exception e)

{ System.out.println(e);

}

}

}

該例子與前面的模擬FTP服務(wù)器類似,不同的只是服務(wù)提供方使用的是 8886端口,此外由于使用的協(xié)議不同,對輸入和輸出流的操作不同。相應(yīng)的客戶端程序可如下:

import java.io.*;

import java.net.*;

public class client {

public static void main(String args[])

{ try

{ Socket sock_1 = new Socket("202.120.127.201", 8886);

DataInputStream client_in = new DataInputStream(sock_1.getInputStream());

DataOutputStream cl_out= new DataOutputStream(sock_1.getOutputStream());

PrintStream client_out=new PrintStream(cl_out);

String s1=client_in.readLine();

System.out.println("Got follow infor from server:"+s1);

client_out.println("This is infor sent by client \r");

}

catch(Exception e)

{ System.out.println(e);

}

}

}

這是一個簡單的客戶端程序的例子,其關(guān)鍵部分是下面四句:

1. Socket sock_1 = new Socket("202.120.127.201", 8886);

2. DataInputStream client_in = new DataInputStream(sock_1.getInputStream());

3. DataOutputStream cl_out= new DataOutputStream(sock_1.getOutputStream());

4. PrintStream client_out=new PrintStream(cl_out);

其中,第一句創(chuàng)建了一個客戶端的Socket,從而與202.120.127.201主機建立一個連接。其中的8886為端口號,與服務(wù)端的Socket所綁定到的端口號相對應(yīng)。第二至四句為Socket創(chuàng)建輸入和輸出流。這四句可以作為編寫客戶端程序的一個范式。接下去的操作同樣是按照約定的協(xié)議對輸出和輸入流進(jìn)行操作。上一程序中同樣對輸入流client_in用方法readLine()讀取服務(wù)端發(fā)送的字符串,對輸出流client_out用方法println("...")向服務(wù)端發(fā)送字符串。

上面兩個程序編譯后執(zhí)行效果如下:

客戶端

C:\xyx\java\sock\bak\c-both-s>java client

Got follow infor from server:This is infor sent by server

服務(wù)端

C:\xyx\java\sock\bak\c-both-s>java server

Got follow infor from client:This is infor sent by client

測試時既可以在同一臺微機上開兩個DOS窗口,也可以在兩臺聯(lián)網(wǎng)的微機上進(jìn)行。在上面的程序基礎(chǔ)上,我們可以為前面的模擬FTP服務(wù)程序編寫一個客戶端程序:

import java.io.*;

import java.net.*;

public class ftpc {

public static void main(String[] args) 

{ try {

Socket sock_1 = new Socket("202.120.127.201", 21);

DataInputStream client_in = new DataInputStream(sock_1.getInputStream());

DataOutputStream cl_out= new DataOutputStream(sock_1.getOutputStream());

PrintStream client_out=new PrintStream(cl_out);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人7777| 国产日韩欧美a| 日韩国产欧美在线播放| 欧美日韩中文一区| 手机精品视频在线观看| 日韩精品一区二| 国产精品18久久久久久久网站| 久久综合色婷婷| 91在线视频播放地址| 一区二区三区精品视频| 在线不卡一区二区| 激情图片小说一区| 亚洲素人一区二区| 欧美三片在线视频观看| 麻豆极品一区二区三区| 中文字幕乱码久久午夜不卡| 色老汉一区二区三区| 日韩精彩视频在线观看| 久久久精品综合| 在线看不卡av| 精品一区二区三区免费播放| 国产日韩精品一区二区浪潮av | 久久99久久久久| 国产喂奶挤奶一区二区三区 | 在线观看国产一区二区| 美女久久久精品| **欧美大码日韩| 欧美一二三四区在线| 不卡的av在线| 视频一区视频二区中文字幕| 国产精品网站在线| 9191成人精品久久| 国产乱色国产精品免费视频| 一区二区三区视频在线观看| 日韩精品专区在线影院重磅| 99视频精品在线| 麻豆一区二区99久久久久| 亚洲少妇最新在线视频| 精品久久久久久久久久久院品网 | 日韩av午夜在线观看| 国产精品午夜久久| 555夜色666亚洲国产免| 99久久久久免费精品国产| 精品一区二区三区免费| 亚洲成在人线免费| 欧美激情一区在线| 欧美xingq一区二区| 欧洲一区在线观看| 成人午夜视频在线| 国产精品一卡二卡在线观看| 日韩电影在线观看网站| 亚洲一区二区不卡免费| 亚洲人成精品久久久久| 国产欧美精品一区二区三区四区| 欧美一级日韩一级| 欧美偷拍一区二区| 在线一区二区三区做爰视频网站| 大胆欧美人体老妇| 国产一区二区在线电影| 老司机一区二区| 日本视频免费一区| 香蕉成人伊视频在线观看| 日韩理论片一区二区| 中文av一区特黄| 中文字幕高清一区| 国产日韩欧美激情| 国产欧美一区二区在线观看| 精品剧情在线观看| 精品国产乱码91久久久久久网站| 欧美顶级少妇做爰| 欧美精品一卡两卡| 欧美精品免费视频| 欧美精三区欧美精三区| 欧美日韩亚洲丝袜制服| 欧美日韩在线免费视频| 欧美日韩在线免费视频| 欧美日韩综合在线| 欧美年轻男男videosbes| 欧美少妇bbb| 欧美日韩成人综合| 欧美老女人第四色| 日韩一区二区麻豆国产| 日韩一区二区免费在线电影| 日韩欧美一二区| 精品三级av在线| 久久欧美中文字幕| 日本一区二区久久| 亚洲欧美怡红院| 亚洲综合视频在线| 亚洲成人av电影| 黄色成人免费在线| www.66久久| 欧美三级乱人伦电影| 日韩午夜精品电影| 日本一二三不卡| 一区二区在线观看视频在线观看| 亚洲在线一区二区三区| 麻豆精品一二三| 国产电影精品久久禁18| 色哟哟国产精品免费观看| 欧美手机在线视频| 欧美v日韩v国产v| 国产精品久久精品日日| 亚洲一区二区三区中文字幕| 久久精品国产澳门| 成人综合婷婷国产精品久久免费| 99riav一区二区三区| 欧美美女视频在线观看| 日本一区二区三区高清不卡| 亚洲最快最全在线视频| 美国三级日本三级久久99| 国产99久久久国产精品潘金| 欧美在线看片a免费观看| 欧美不卡视频一区| 亚洲欧美综合网| 丝袜国产日韩另类美女| 丁香五精品蜜臀久久久久99网站 | 欧美日本一道本在线视频| 久久免费国产精品| 亚洲一区二区三区免费视频| 精品夜夜嗨av一区二区三区| 91日韩一区二区三区| 日韩免费成人网| 一区二区三区在线观看视频| 老司机精品视频在线| 色噜噜夜夜夜综合网| 久久精品亚洲精品国产欧美 | 加勒比av一区二区| 91电影在线观看| 中文字幕欧美激情一区| 奇米影视在线99精品| 93久久精品日日躁夜夜躁欧美| 欧美一区二区三区在线| 亚洲欧美激情一区二区| 国产又黄又大久久| 欧美日韩高清在线播放| 亚洲三级免费电影| 国产在线精品一区二区不卡了| 欧美私人免费视频| 亚洲欧美日韩在线| 国产成人鲁色资源国产91色综| 在线综合视频播放| 一个色综合av| av在线这里只有精品| 国产欧美精品一区二区三区四区| 蜜臀久久99精品久久久画质超高清 | 日韩一区二区三区免费看 | 国产欧美一区二区精品久导航 | 91小视频在线免费看| 久久精品视频在线看| 麻豆国产精品视频| 69精品人人人人| 午夜欧美一区二区三区在线播放| 一本久久a久久精品亚洲| 国产精品福利电影一区二区三区四区| 毛片不卡一区二区| 欧美一区二区视频网站| 三级在线观看一区二区| 欧美日韩一区在线观看| 亚洲精品视频在线观看免费| 91小视频在线观看| 《视频一区视频二区| 丁香六月久久综合狠狠色| 中文欧美字幕免费| 成人美女视频在线观看18| 国产日产精品一区| 国产一区在线视频| 久久免费偷拍视频| 国产成人夜色高潮福利影视| 久久夜色精品一区| 国产精品一区一区三区| 久久久亚洲午夜电影| 国产在线精品视频| 国产精品天干天干在观线| 成人在线视频首页| 最新国产成人在线观看| 99久久99精品久久久久久| 亚洲欧美激情在线| 欧美三级在线看| 蓝色福利精品导航| 精品日韩一区二区| 成人亚洲一区二区一| 国产精品成人免费在线| 在线观看亚洲精品视频| 首页国产欧美久久| 精品国产乱码久久久久久免费| 国产福利一区二区三区视频在线| 中文字幕免费一区| 欧美系列在线观看| 青青青爽久久午夜综合久久午夜| 日韩女同互慰一区二区| 国产精品一区二区久久不卡| 亚洲三级免费观看| 91精品国产综合久久久久久| 激情综合一区二区三区| 亚洲美女一区二区三区| 91精品国产福利在线观看| 国产成人啪免费观看软件| 亚洲精品一二三四区| 欧美一区二区三区系列电影|