1.Java SE的Socket编程
在网络编程中,一共有三类Socket可以使用:SOCK_STREAM、SOCK_DGRAM、SOCK_RAM
SOCK_STREAM:提供一对一U的字节流通信,即TCP编程。(双向通信)
SOCK_DGRAM:提供的是报文服务,即UDP编程。(双向通信)
java.net包中提供了Socket和DatagramSocket两个核心类
Socket类用于面向连接的TCP编程
DatagramSocket类提供了数据报文服务功能,实现UDP编程
服务器端
使用ServerSocket类听过监听端口的功能。其声明如下:
public class ServerSocket extend Object
常用的构造方法:
ServerSocket (int port) throw IOException
方法:close()关闭服务器,accept()
例子: 通过ServerSocket将客户端输入的数据返回给客户端程序
import java.io.*;
import java.net.*;
public class ServerView{
public static void main()throws IOException{
//创建ServerSocket类对象,用来监听端口(port),
ServerSocket ss=new ServerSocket(8888);//8888是一个端口
//调用ServerSocket类的accept()方法,阻塞服务器进程,当与客户端连接后
Socket s=ss.accept();
//调用Socket对象的getInputStream()方法得到输入流
BufferReader br=new BufferReader(new InputStreamReader(s.getInputStream()));
// 调用Socket对象的getOutputStream()方法得到输出流
PrintWriter pw=new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
String str="";
//读取从客户端穿过来的数据并发送到客户端
while((str=br.readLine())!=null){
pw.printIn(str);
pw.fiush();}
br.close(); pw.close(); s.close(); ss.close();
}}
客户端
使用Socket对象连接服务器,常用构造方法:
public Socket(String host,int port)throw UnknowHostExeception,IOExeception
其中host为服务器的IP或主机名称,port为要访问的服务器程序监听的端口号
步骤如下:
try{
Socket client=new Socket("location",8888);
}catch(UnknowHostExeception e){
System.out.printIn("主机不存在');
}catch(IOExeception e){
System.out.printIn("服务器不在或忙');}
//得到一个输入流
try{
BufferedReader input =new BufferedReader(new InputStreamReader(client.getInputStream()));
//读取来自客户端的数据流
String message="";
while(message=input.readerLine()!=null)
{//处理数据
........
}catch(IOException e){
System.out.printIn("数据读取出错:"+e.getMessage());}
}
//得到一个输出流
try{
PrintWriter output=new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
String message="";
//从客户端获取数据
.......
//输出到服务器
output.printIn(message);
output.flush();//将数据发送到服务器端
}catch(IOException e){
System.out.printIn("数据写入出错:"+e.getMessage());}
}
//关闭输入输出流
try{
output.close();
input.close();
client.close();
}catch(IOEception e){
System.out.printIn("关闭出错:"+e.getMessage());}
}
多线程