Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
使用Socket实现客户端的步骤;
1、通过IP地址和端口实例化Socket,请求连接服务器
2、获取Socket上的流以进行读写
3、把流包装进BufferReader/PrintWriter的实例
4、对Socket进行读写
5、关闭打开的流
创建服务器的步骤:
1、指定端口实例化一个ServerSocket
2、调用ServerSocket的accept()以在等待连接期间造成阻塞
3、获取位于该层Socket的流以进行读写操作
4、将数据封装成流
5、对Socket进行读写
6、关闭打开的流
try{
InetAddress ia = InetAddress.getByName("192.168.1.110");//IP地址
Socket sk = new Socket(inetAddress,8888,true);//端口
InputStream is =sk.getInputStream();//得到数据
OutputStream os = sk.getOutputStream();
.....//数据处理
}catch(Exception e){
}
创建一个服务器端的代码:
ServerSocket server = null;
try{
server = new ServerSocket(8888);
Socket socket = new server.accpet();//accpet()为一个阻塞函数
//服务器端在33221端口号监听客户请求,在这里服务器端只能接收一个请求,接收后服务器端就退出了。实际的应用中总是让他不停地循环接收,一旦有客户请求,服务器端总是会创建一个服务器线程来服务新来的客户,而自己则继续监听。
}catch(Exception e){
}
Socket 提供了getInputStream()和getOutPutStream()来得到对应的输入(输出)流以进行读(写)操作,这两个方法分别返回InputStream和OutputStream类对象。
InetAddress remoteIP = InetAddress.getByName("localhost");
DatagramSocket socket = new DatagramSocket();
BufferedReader wt = new BufferedReader (new InputStreamReader(System.in));
DatagramPacketoutputPacket=new DatagramPacket(outputData,outputData.length,remoteIP,8000);
socket.send(outputPacket);
客户端
DatagramSocket udpSocket = new DatagramSocket(8000);
DatagramPacket packet = new DatagramPacket(new byte[512],512); // UDP数据读取
udpSocket.receive(packet);
String msg = new String(packet.getData()), 0,packet.getLength());