Socket编程要点及方法

  • 格式:doc
  • 大小:32.00 KB
  • 文档页数:3

Socket编程要点及方法

1)建立网络连接:

ServerSocket类用来在服务器中创建对象监听指定的端口号(大于1024)。例如:

ServerSocket server=new ServerSocket(5678);

用ServerSocket类中的accept()方法在服务器中产生“阻塞”,等待客户端的连接并且返回这个客户端的Socket对象。例如:

Socket client=server.accept();

用Socket类的构造方法在客户端中向服务器发出请求并建立网络连接。例如:

Socket client=new Socket(“192.168.0.2”,5678);

在连接成功时,服务器和客户端都会产生一个Socket对象,Socket的getInputStream()方法可以返回一个InputStream对象,可以利用这个对象建立数据输入流对象,数据输入流对象用来接收数据。Socket的getOutputStream()方法可以返回一个OutputStream对象,可以利用这个对象建立数据输出流对象,数据输出流对象用来发送数据。

2)创建数据输入流对象和数据输出流对象

DataInputStream和DataOutputStream是java.io包中实现字节数据流传输的类,运用在网络、I/O和文件等方面的数据流传输。

服务器和客户端两面都需要创建数据输入流对象和数据输出流对象。例如:

DataOutputStream sender=new DataOutputStream(client.getOutputStream());

DataInputStream receiver=new DataInputStream(client.getInputStream());

可以利用数据输入流对象和数据输出流对象进行会话。

3)会话:

用DataOutputStream类的writeUTF(String str)方法使用字符的 UTF-8 格式输出字符串的每个字符。DataInputStream类的String readUTF()方法从数据输入流中读取用 UTF-8 格式编码的 Unicode 字符格式的字符串,然后返回这个字符串。例如:

发送数据:

sender.writeUTF(“hello Client”);

接收数据:

while(true){ //需要等待

String readClient=receiver.readUTF();

}

1. Java Socket编程实例

1)服务器程序

//Java Socket编程实例_服务器程序

import .*;

import java.io.*;

public class Server{

Server(){

try{

//使用server对象监听指定的端口号(大于1024)。

ServerSocket server=new ServerSocket(5678);

int i=0;//计客户端的访问次数

while(true){

//等待接受到一个客户端的连接并且返回这个客户端的Socket对象。 Socket client=server.accept();

i++;

//建立和启动线程并将客户端的Socket对象作为参数传递给线程。

ServerThread clientThread=new ClientThread(client,i);

clientThread.start();

}

}catch(Exception e){e.printStackTrace();}

}

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

new Server();

}

}

class ClientThread extends Thread{

Socket client;

int i;

ServerThread(Socket client,int i){

//接受 从Server类传来的参数client和i

this.client=client;

this.i=i;

}

public void run(){

try{

/建立输入和输出数据流连接对象(send和receive)。

DataOutputStream send=new DataOutputStream(client.getOutputStream());

DataInputStream receive=new DataInputStream(client.getInputStream());

//进行会话(发送数据和接受数据)。

send.writeUTF("HELLO,CLIENT"+i);

//接受并显示数据。

while(true){

String readClient=receive.readUTF();

System.out.println(readClient);

}

}catch(Exception e){e.printStackTrace();}

}

}

2)客户端程序

//Java Socket编程实例_客户端程序

import java.io.*;

import .*;

public class Client{

Client(){

try{

//向服务器发出请求并建立网络连接.

Socket client = new Socket("127.0.0.1",5678); //创建数据输入流对象和数据输出流对象.

DataInputStream in=new DataInputStream(client.getInputStream());

DataOutputStream out=new DataOutputStream(client.getOutputStream());

//向服务器发送数据

out.writeUTF("hello Server");

//接收服务器发来的数据:

while(true){

String readServer=in.readUTF();

System.out.println(readServer);

out.writeUTF("Thanks Server");

if(readServer.equals("Thanks Client"))break;}

}catch(Exception e){e.printStackTrace();}

}

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

new Client();

}

}