Socket简单实例(简单实现调用accpet()方法开始监听)

来源:互联网 发布:法律大数据 编辑:程序博客网 时间:2024/06/05 10:09

Socket编程

  Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。

  Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。

socket的基本操作
  • 1、socket()函数
  • 2、bind()函数
  • 3、listen()、connect()函数
  • 4、accept()函数
  • 5、read()、write()函数等
  • 6、close()函数
简单的实现一个调用accept()方法的测试例子
创建一个SocketClient.java
package com.webService.client;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;/** * 客户端【先启动服务端,再启动客户端】 * 服务端对应的是本包下的SocketServer * @author Administrator * */public class SocketClient {public static void main(String[] args) {try {//1.创建客户端Socket,指定服务器地址和端口Socket socket = new Socket("localhost",8888);//2.获取输入流,向服务器端发送消息OutputStream os = socket.getOutputStream();//字节输出流//将输出流包装为打印流PrintWriter pw = new PrintWriter(os);pw.write("用户名:admin;密码:admin");pw.flush();//关闭输入流socket.shutdownOutput();//获取服务器端的输入流,并将读取服务端的响应信息InputStream in = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(in));String info = "";while((info = br.readLine()) != null){//  br.readLine() != nullSystem.out.println("我是客户端,服务端说:" + info);}//关闭资源br.close();in.close();pw.close();os.close();socket.close();} catch (Exception e) {e.printStackTrace();}}}

创建一个SocketServer.java
package com.webService.client;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;/** * 基于TCP协议的Socket通信,实现用户登录 * 服务端 * @author Administrator * */public class SocketServer {public static void main(String[] args) {try {//1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口ServerSocket serverSocket = new ServerSocket(8888);//2.调用accpet()方法开始监听,等待客户端的链接System.out.println("*****服务器即将开启,等待客户端链接*****");Socket socket = serverSocket.accept();//3.获取输入流,并读取客户端信息InputStream is = socket.getInputStream();//将字节流转换成字符流InputStreamReader isr = new InputStreamReader(is);//为输入流添加缓冲BufferedReader br = new BufferedReader(isr);//循环读取客户端信息String info = "";while((info = br.readLine()) != null){//  br.readLine() != nullSystem.out.println("我是服务器,客户端说:" + info);}socket.shutdownInput();//关闭输入流//4.获取输出流。响应客户端请求OutputStream os = socket.getOutputStream();PrintWriter pw = new PrintWriter(os);pw.write("欢迎您!");pw.flush();//调用flush()方法,将缓存输出//5.关闭资源pw.close();os.close();br.close();isr.close();is.close();socket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}

注意:SocketServer.java是服务端的
SocketClient.java 是客户端的
先启动服务端的程序,在启动客户端。不然后报错
显示结果:
服务端显示的是:
*****服务器即将开启,等待客户端链接*****
我是服务器,客户端说:用户名:admin;密码:admin
客户端显示的是:
我是客户端,服务端说:欢迎您!




0 0