客户端socket

流程:

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)实例的更多相关文章

  1. Java套接字Socket编程--TCP参数

    在Java的Socket中,主要包含了以下可设置的TCP参数. 属性 说明 默认值 SO_TIMEOUT 对ServerSocket来说表示等待连接的最长空等待时间; 对Socket来说表示读数据最长 ...

  2. [置顶] Java套接字Socket编程

    1)概念 网络编程基本模型就客户端到服务器的模型,也就是我们常见的C/S模型.简单的说就是两个进程间相互通信的过程.即通信双方一方作为服务器等待客户端提出请求并给以回应,另一方作为客户端向服务器提出请 ...

  3. Java套接字socket编程笔记

    相对于C和C++来说,Java中的socket编程是比较简单的,比较多的细节都已经被封装好了,每次创建socket连接只需要知道地址和端口即可. 在了解socket编程之前,我们先来了解一下读写数据的 ...

  4. 进程间通信系列 之 socket套接字及其实例

    进程间通信系列 之 概述与对比   http://blog.csdn.net/younger_china/article/details/15808685  进程间通信系列 之 共享内存及其实例   ...

  5. Java网络编程--套接字Socket

    一.套接字Socket IP地址标志Internet上的计算机,端口号标志正在计算机上运行的进程(程序). 端口号被规定为一个16位的0--65535之间的整数,其中,0--1023被预先定义的服务通 ...

  6. Linux进程间通信(九):数据报套接字 socket()、bind()、sendto()、recvfrom()、close()

    前一篇文章,Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用. 一.简单回顾——什么是数据报套 ...

  7. Linux进程间通信(八):流套接字 socket()、bind()、listen()、accept()、connect()、read()、write()、close()

    前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程.通常我们使用socket进行网络编 ...

  8. 套接字socket 的地址族和类型、工作原理、创建过程

    注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...

  9. 套接字编程,创建套接字socket

    1.套接字地址结构: struct sockaddr { sa_family_t sa_family; char sa_data[14]; }; 其中,成员sa_family表示套接字的协议族类型,对 ...

  10. 什么是套接字(Socket)

    应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连 ...

随机推荐

  1. Python全栈开发-Day11-RabbitMQ/Redis

    本节内容 RabbitMQ——消息队列 Memcached & Redis使用 1.RabbitMQ——消息队列 RabbitMQ与Queue的关系 1.做的事情是一样的,两者都是队列. 2. ...

  2. 子数组最小值的总和 Sum of Subarray Minimums

    2018-09-27 23:33:49 问题描述: 问题求解: 方法一.DP(MLE) 动态规划的想法应该是比较容易想到的解法了,因为非常的直观,但是本题的数据规模还是比较大的,如果直接使用动态规划, ...

  3. ico 图标 生成 工具 网站

    http://www.faviconico.org/favicon favicon.ico在线制作,在线Favicon.ico制作转换工具

  4. 并发之ThreadLocal

    ThreadLocal ThreadLocal 用一种存储变量与线程绑定的方式,在每个线程中用自己的 ThreadLocalMap 安全隔离变量,为解决多线程程序的并发问题提供了一种新的思路.   简 ...

  5. BroadcastReceiver(广播)的静态注册和动态注册 --Android开发

    BroadcastReceiver是安卓四大组件之一,本例通过代码的方式演示静态注册和动态注册. 1.静态注册 静态注册只需要AndroidManifest.xml中进行配置: AndroidMani ...

  6. Practical Node.js (2018版) 第4章: 模版引擎

    Template Engines: Pug and Handlebars 一个模版引擎是一个库或框架.它用一些rules/languages来解释data和渲染views. web app中,view ...

  7. 图解GIT,ZT

    图解GIT,ZT http://nettedfish.sinaapp.com/blog/2013/08/05/deep-into-git-with-diagrams/

  8. centOS 6.5安装python和nginx

    一.安装python3.5 1.安装python3.5

  9. 基于Lua语言的触动精灵脚本开发

    工具下载 官网地址 连接模拟器 studio连接 首先要先下载ADB模拟器连接IDE,注意,这里一定要用官网提供的ADB,安卓开发的adb不行!!! 下载好之后,打开studio,输入Access K ...

  10. Webpack实现路由懒加载的三种方式

    原文指路:https://blog.csdn.net/qq_37540004/article/details/78727063 第一种: 引入方式(正常引入): const router = new ...