您的位置:首页 > 编程语言 > Java开发

java socket编程小例子

2013-11-05 22:11 323 查看
一该程序的基本思路

(1)建立客户端:

A.根据要连接的一方(server)方的IP地址以及端口号,发出客户请求(对应server:此时server.accept()方法可以在端口号处侦听,是否有客户端请求出现)生成socket。

B.利用客户端socket获取is os流,分别构造bufferedReader
,printwriter 对象。

C.每当从控制台录入文字时候,就将利用os将数据写到流中,同时刷新流,使得服务器端能够及时收到。紧接着从is中读取数据。

D.需要注意,无论什么异常出现,都要将流关闭。

(2)建立服务器端:

A.根据侦听的端口号建立server端,server.aceept()会阻塞,直到有客户端请求为止,并返回一个socket

B.其余类似建立客户端过程。

二源代码

Client

/**

* @FILE : TalkClient.java

* @PACKAGE : Client

* @COPYRIGHT : copyright(c) 2013,Rights Reserved

* @COMPANY :

* @DESCIPTION :

* @AUTHOR : formice

* @VERSION : v1.0

* @DATE : 2013-10-29
下午02:14:08

*/

package Client;

import java.net.Socket;

import java.io.*;

import java.net.*;

/**

***************************************************************

* @CLASS : TalkClient

* @DESCRIPTION : socket客户端编程

* @AUTHOR : leixingbang

* @AUTHOR-EMAIL : leixingbang@163.com

* @VERSION : v1.0

* @DATE : 2013-10-29
下午02:14:08



* <p>

* @MODIFY LOG :

* @AUTHOR : leixingbang

* @VERSION : v2.0

* @MODIFY DATE :

* </p>

****************************************************************

*/

public class TalkClient implements Runnable{

public void run()

{

Socket clientSocket=null;//必须先进行初始化

BufferedReader sin=null;

PrintWriter os=null;

BufferedReader is=null;



try{

System.out.print("客户端开始运行!\n");

clientSocket=new Socket("127.0.0.1",4700);

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

//获取客户端输入

//Reader reader=new InputStreamReader(System.in);

os=new PrintWriter(clientSocket.getOutputStream());

//输出到网络流

is =new BufferedReader(

new InputStreamReader(clientSocket.getInputStream()));

//从网络流读取

String readline=sin.readLine();//获取输入字符串

String serverline;

while(!readline.equals("bye")){

os.println(readline);

os.flush();

System.out.println("客户端发送:"+readline);

serverline=is.readLine();

System.out.println("客户端收到:"+serverline);

readline=sin.readLine();

}



}catch(Exception e)

{

e.printStackTrace();

}finally//关闭流

{

try {

is.close();

os.close();

sin.close();

clientSocket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

public static void main(String args[]) {



}

}

Server:

/**

* @FILE : TalkServer.java

* @PACKAGE : Server

* @COPYRIGHT : copyright(c) 2013,Rights Reserved

* @COMPANY :

* @DESCIPTION :

* @AUTHOR : formice

* @VERSION : v1.0

* @DATE : 2013-10-29
下午02:51:02

*/

package Server;

import java.net.*;

import java.io.*;

import Client.TalkClient;



/**

***************************************************************

* @CLASS : TalkServer

* @DESCRIPTION :

* @AUTHOR : leixingbang

* @AUTHOR-EMAIL : leixingbang@163.com

* @VERSION : v1.0

* @DATE : 2013-10-29
下午02:51:02



* <p>

* @MODIFY LOG :

* @AUTHOR : leixingbang

* @VERSION : v2.0

* @MODIFY DATE :

* </p>

****************************************************************

*/

public class TalkServer implements Runnable {

int i=0;

public void run()

{

ServerSocket server=null;

Socket socket=null;

BufferedReader is=null;

PrintWriter os=null;

try{

server=new ServerSocket(4700);//监听端口

socket=server.accept();//请求到来才会产生

//使用accept()阻塞等待客户请求,有客户请求到来才产生一个Socket对象,并继续执行

}catch(Exception e)

{

System.out.println("建立server异常");

//e.printStackTrace();

}

try

{

System.out.print("服务器端开始运行!\n");

String line;

String temp;

is=new BufferedReader(

new InputStreamReader(socket.getInputStream()));

//获取输入流并构造输入流对象(装饰者模式,父类调用子类方法)

line=is.readLine();//会构成阻塞,知道获取一行文字才会继续执行下面的程序

os=new PrintWriter(socket.getOutputStream());

//由socket获取输出流,并构造输出流对象

while(!line.equals("bye"))

{

i++;

System.out.println("服务器端收到来自客户端第"+i+"条信息:"+line);

temp="服务器回复:"+"我已收到来自客户端第"+i+"条信息";

os.println(temp);

os.flush();

//刷新输出流,使Client马上收到该字符串

line=is.readLine();

}

}catch(Exception e)

{

System.out.println("服务器端异常!");

e.printStackTrace();

}finally

{

try{

socket.close();

server.close();

is.close();

}catch(Exception e)

{

e.printStackTrace();

}

}



}

public static void main(String args[]) {

TalkClient talkClient=new TalkClient();

Thread clientThread=new Thread(talkClient);

clientThread.start();

TalkServer talkServer=new TalkServer();

Thread serverThread=new Thread(talkServer);

serverThread.start();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: