java套接字(socket)实例

java

流程:

1、连接远程主机

2、发送数据

3、接收数据

4、关闭流与socket连接

实例:

import java.io.*;

import java.net.Socket;

import java.util.Date;

/**

* Created by CLY on 2017/7/11.

*/

public class ClientSocket {

public static void main(String[] arg){

int port = 233;//与之连接的服务端套接字的端口号

String host = "127.0.0.1";//与之连接的服务端套接字ip地址

Socket socket = null;

try {

//创建socket连接,即在该Socket构造函数返回之前,就会与远程主机建立连接,如果未能连接,则会抛出异常。

socket = new Socket(host, port);

//获取输出流,向服务器端发送当前时间

OutputStream outputStream = socket.getOutputStream();

Writer writer = new OutputStreamWriter(outputStream);

String now_date = new Date().toString();

writer.write("客户端当前时间为——"+now_date);

writer.flush();

////关闭客户端的输出流。相当于给流中加入一个结束标记-1.这个样子服务器的输入流的reaLine方法就会读到一个-1,然后结束readLIne方法。

socket.shutdownOutput();

//获取输入流,并读取服务器端的响应信息

InputStream inputStream= socket.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));

String server_info = null;

while((server_info=br.readLine())!=null){

System.out.println("服务端传过来的值:"+server_info);

}

} catch (IOException e) {

e.printStackTrace();

} finally {

//如果socket不为null,则释放掉它

if (socket!=null){

try {

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

服务端Socket

流程:

1、绑定端口

2、监听入站数据

3、在绑定的端口上接受来自远程机器的连接

4、接收数据

5、发送数据

6、关闭流与socket连接

实例:

import java.io.*;

import java.net.InetAddress;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.Date;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

/**

* Created by CLY on 2017/7/11.

*/

public class MyServerSocket {

public static void main(String[] arg){

/**

* 根据tcp协议可知,所谓套接字(socket)是指一个由“ip地址+端口”组成的组合。

* 而每一台主机的ip地址都是确定的,不需要我们来指定,

* 所以构建服务器socket的第一步就是确定端口

*/

try {

int port = 233;//端口号

int queueLength = 50;//最大入站连接

InetAddress bindAddress = InetAddress.getByName("127.0.0.1");//只监听该ip的指定端口

ExecutorService pool = Executors.newFixedThreadPool(50);//创建一个最大容量为50的线程池,为每一个入站连接分配一条线程。

//创建一个端口为“233”的服务器socket

ServerSocket serverSocket = new ServerSocket(port);

//创建一个端口为233的服务器socket,且队列一次最多能保存50个入站连接

//ServerSocket serverSocket = new ServerSocket(port,queueLength);

//假设一台主机有多个ip地址,则服务器socket会默认在所有ip地址的指定端口上监听,但可以指定其只监听指定ip的端口。

//ServerSocket serverSocket = new ServerSocket(port,queueLength,bindAddress);

while (true){

//accept()调用会阻塞,会一直等到有客户端连接到指定socket端口为止。

final Socket connection = serverSocket.accept();

//线程池中拿取一条线程来处理socket连接。然后主程序运行下一个循环,继续等待下一个客户端的访问。

pool.execute(new Runnable() {

public void run() {

try {

//从输入流中读取获取客户端传过来的值

InputStream inputStream= connection.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));

String client_info = null;

while((client_info=br.readLine())!=null){

System.out.println("客户端传过来的值:"+client_info);

}

//测试:将当前时间写入流中返回给客户端

Writer writer = new OutputStreamWriter(connection.getOutputStream());

String nowData = new Date().toString();

writer.write("服务端当前时间为——"+nowData);

writer.flush();

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

//关闭socket连接

connection.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

});

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

以上是 java套接字(socket)实例 的全部内容, 来源链接: utcz.com/z/391500.html

回到顶部