java套接字(socket)实例
客户端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)实例的更多相关文章
- Java套接字Socket编程--TCP参数
在Java的Socket中,主要包含了以下可设置的TCP参数. 属性 说明 默认值 SO_TIMEOUT 对ServerSocket来说表示等待连接的最长空等待时间; 对Socket来说表示读数据最长 ...
- [置顶] Java套接字Socket编程
1)概念 网络编程基本模型就客户端到服务器的模型,也就是我们常见的C/S模型.简单的说就是两个进程间相互通信的过程.即通信双方一方作为服务器等待客户端提出请求并给以回应,另一方作为客户端向服务器提出请 ...
- Java套接字socket编程笔记
相对于C和C++来说,Java中的socket编程是比较简单的,比较多的细节都已经被封装好了,每次创建socket连接只需要知道地址和端口即可. 在了解socket编程之前,我们先来了解一下读写数据的 ...
- 进程间通信系列 之 socket套接字及其实例
进程间通信系列 之 概述与对比 http://blog.csdn.net/younger_china/article/details/15808685 进程间通信系列 之 共享内存及其实例 ...
- Java网络编程--套接字Socket
一.套接字Socket IP地址标志Internet上的计算机,端口号标志正在计算机上运行的进程(程序). 端口号被规定为一个16位的0--65535之间的整数,其中,0--1023被预先定义的服务通 ...
- Linux进程间通信(九):数据报套接字 socket()、bind()、sendto()、recvfrom()、close()
前一篇文章,Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用. 一.简单回顾——什么是数据报套 ...
- Linux进程间通信(八):流套接字 socket()、bind()、listen()、accept()、connect()、read()、write()、close()
前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程.通常我们使用socket进行网络编 ...
- 套接字socket 的地址族和类型、工作原理、创建过程
注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...
- 套接字编程,创建套接字socket
1.套接字地址结构: struct sockaddr { sa_family_t sa_family; char sa_data[14]; }; 其中,成员sa_family表示套接字的协议族类型,对 ...
- 什么是套接字(Socket)
应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连 ...
随机推荐
- Oracle DB , 计算各个用户/schema 的磁盘占用空间
http://www.dba-oracle.com/t_find_size_schema.htm Question: How do I find the size of a schema in my ...
- LeetCode--434--字符串中的单词数
问题描述: 统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符. 请注意,你可以假定字符串里不包括任何不可打印的字符. 示例: 输入: "Hello, my name is Joh ...
- 使用VueCLI的User Interface Tool(GUI)创建app的图文讲解
(英文原文) 需要安VueCLI3和nodejs. 在terminal输入vue可以看到命令列表: 其中vue ui [options] 就是用于开始和打开vue-cli ui的命令. 使用http: ...
- (GoRails)在导航栏增加自动的搜索功能(jquery插件:easyautocomplete)(gem 'ransack' 搜索对象4000✨)
Global Autocomplete Search 需要用到一个JQuery插件和一个搜索对象的gem EasyAutocomplete jQuery插件: https://github.com/p ...
- Nginx安装与使用 及在redhat 中的简单安装方式
首先说下在redhat中的安装方法, 正常安装nginx 需要安装很多的依赖,最后再安装nginx,而且很容易出错. 在nginx官方上有这么一段描述: Pre-Built Packages for ...
- Confluence 6 空间
什么是一个空间? Confluence 空间是包含有页面和博客页面的容器.你也可以将空间认为是对你工作中可以使用的 2 中类型的目录. 在 Confluence 中有下面 2 种空间类型: 站点空间( ...
- HTML 弹出遮罩层一(遮罩层和内容标签嵌套)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【洛谷p5015】标题统计
(写上瘾了再来一篇吧) 标题统计[传送门] 洛谷算法标签 字符串这种东西,我看到是崩溃的.因为我们只学到了二维数组[这个梗自行get],总之我们当时还没有学.然后显然就是各种翻书,各种百度.大致了解了 ...
- 创建gitlab ssh 密钥
SSH代表用于管理网络,操作系统和配置的Secure Shell或Secure Socket Shell,并且每次都不需要使用用户名和密码即可验证GitLab服务器. 您可以设置SSH密钥以提供计算机 ...
- Linux系统起源及主流发行版
Linux系统起源及主流发行版 本文首先介绍了三大服务器系统,然后介绍了Linux系统的出现背景.以及主要release版本,最后介绍了Linux的文件系统和目录结构. 服务器系统,即安装在服 ...