a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 148|回复: 2

[其他] JAVA技巧:什么是Javasocket套接字

[复制链接]
发表于 2012-8-4 12:28:23 | 显示全部楼层 |阅读模式
什么是Java socket套接字呢?这个问题在接下来的文章中就会向大家有所帮助。其实有很多的时候有关的代码还是需要我们从理论中寻找有关的问题,希望大家有所帮助。* ?, ?( S* @; I$ V  N
  所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。# Q% ~/ z* ?9 @5 q% T
  以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
! |' U2 b( t# U  重要的Java socket套接字 API:" o6 e1 P8 p. `0 P: Z
  java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。* j4 V. i2 h  H$ p9 i2 z# X
  .Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。
$ M. g/ R. J. ~& X: m+ F  .getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例。/ }$ |6 j. v& w! P* E; z; V
  .getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。
7 O7 ]4 ?8 Z8 J0 ?% l& D  注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。
" k2 m5 p/ C* ]6 k9 @  如何开发一个Server-Client模型的程序
; a  s9 _- V) S3 Z  Java socket套接字开发原理:
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:28:24 | 显示全部楼层

JAVA技巧:什么是Javasocket套接字

30.public static void main(String[] args)% e: u4 ~& k& m) V$ w; t
  31.{
- v- C& s9 w2 g! i  32.new Server();4 ~: a  ]& I& G+ }- l2 P
  33.}& K. g. {/ `6 Y: K
  34.}# G1 @7 t" C. Z7 z& I
  这个程序建立了一个服务器,它一直监听10000端口,等待用户连接。在建立连接后给客户端返回一段信息,然后结束会话。这个程序一次只能接受一个客户连接。
: p& z, m9 i2 B: k+ S" B, w  {建立客户端}' X. P( V: K- x% r* n
  35.import java.io.*;/ C3 c7 k' S1 n2 H# l$ W0 g( a
  36.import java.net.*;
6 q% c9 D/ V% e- w) N* t  37.public class Client8 \6 L4 @3 a$ \4 U0 ^; C) Z3 X! t
  38.{9 m+ b* K" z5 q- N  z
  39.Socket socket;
8 K/ P9 D7 K% \1 k, F2 z  40.BufferedReader in;4 n+ |* q) [2 ~" _  c
  41.PrintWriter out;
3 W8 G7 `5 P' X$ e3 }  42.public Client()
! K& z; x; i8 T; H2 `% m* |  43.{
3 D5 B; h. S# j9 p2 s+ V  44.try
8 V+ }& n1 Z  j1 M' K) `: x  45.{$ @, d/ B8 p# U
  46.socket = new Socket("xxx.xxx.xxx.xxx", 10000);
8 \/ [8 @6 i5 z8 e5 I! q3 T$ o; h; ~  47.in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
1 r" ~1 |) \& T  48.out = new PrintWriter(socket.getOutputStream(),true);
/ W9 S, K1 [9 y& z- ?  49.BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
4 G- A( R8 \# q0 V  50.out.println(line.readLine());7 j- u* k1 v4 O. [1 {
  51.line.close();9 _) b3 a' h$ m3 M
  52.out.close();
( V& o1 K9 T5 {( a: o; ]( K, h8 S$ E; j% p  53.in.close();3 W. J2 `/ k+ k8 b' Z4 N, W
  54.socket.close();8 H+ E* h1 t+ n, |
  55.}  H- f. d/ d0 e! o1 i
8 S/ b! W2 x$ Z- m. |( a+ a0 o
  56.catch (IOException e)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 12:28:25 | 显示全部楼层

JAVA技巧:什么是Javasocket套接字

</p>  57.{}
! X  H. b. |) K' I4 ]3 W' A, ~- l  58.}/ H3 B3 c( t) O% h6 e# C
  59.public static void main(String[] args)
7 Y/ \. s) J# v( S: o  60.{! t, c* L: j5 l! G& I0 x, e
  61.new Client();/ r4 ]5 P* O5 j% j' s
  62.}. \. }# C. d( K5 R6 l
  63.}& J# B" n& \+ T1 A* g  {4 T3 p
  这个客户端连接到地址为xxx.xxx.xxx.xxx的服务器,端口为10000,并从键盘输入一行信息,发送到服务器,然后接受服务器的返回信息,最后结束会话。以上就是对Java socket套接字的详细介绍。" |* ]( L+ n" u+ h+ t
  服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。
1 R+ j3 T1 N: h- N  客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。  d; I8 X6 `( ^
  {建立服务器}
- w; c: n. h. r6 J1 r0 Y% E! W  1.import java.net.*;
1 ?9 K/ P7 @  H  i1 a  2.import java.io.*;# l& @0 A/ u& i
  3.public class Server- W1 `% H5 |/ q; c1 C( s# T
  4.{
0 u) ~% u/ n" C) K/ |- m$ K; l  5.private ServerSocket ss;5 B6 d" V! H2 ?8 k
  6.private Socket socket;
1 D$ |2 D; }* N' u( [" n  7.private BufferedReader in;
& G9 M* P5 u+ {/ m' d8 `, w  8.private PrintWriter out;
% m. s' A5 y" f" @- d  9.public Server()5 S! \% m; |4 d( o5 o1 V
  10.{
% ^9 Y( M( p7 Q% ?7 T. P  11.try
+ q8 y: l+ t* i  12.{
) f# r$ f8 B: E9 o+ _  13.ss = new ServerSocket(10000);' t$ y( j/ C6 l8 m& g6 u6 [
  14.while (true): d* q" L+ `4 r, V; v( Y
  15.{
9 |/ d5 a& d' O+ ]& \. B# K  16.socket = ss.accept();
" K7 C2 w3 J" e  U  17.in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
- m0 J9 {( F7 t: `; d# k6 q  18.out = new PrintWriter(socket.getOutputStream(),true);
& B- ~. p- n$ P: g5 u% m  19.String line = in.readLine();, B9 h7 e! H" ~% R8 _5 {
  20.out.println("you input is :" + line);; a/ y8 l$ b: V; b) @
  21.out.close();
% P. {9 r- D, g) Q6 Z$ m  22.in.close();
, c1 \, g9 Z% L& [  Q  23.socket.close();2 a8 ^' }+ [9 F. m
  24.}
: K! Z. S3 M" P1 I7 F  25.ss.close();& Z. R- H+ f6 v) \
  26.}
+ R6 A0 u3 o5 ?/ \+ N0 D  27.catch (IOException e)
9 G% X, Y* Q) m- s  a% k! b' B. X9 t2 X  28.{}
* ?* i6 d% Y: s1 U2 O4 c4 {& }5 k  29.}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-3 23:34 , Processed in 0.290714 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表