客户端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. R语言函数总结(转)

    R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头,第二个字符不允许是数字. 基本命令要么是表达 ...

  2. R基本图形示例及代码(持续收集)

    分布图 hist(MetaData$genes, breaks = 100, main = "Gene number distribution", xlab = "Gen ...

  3. Python核心编程的四大神兽

    http://www.cnblogs.com/ssy3340/p/9747722.html

  4. LeetCode--012--整数转罗马数字(java)

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...

  5. p1468 Party Lamps

    就是模拟.同一个开关按2下相当于没按,那么,如果一共按0下,就是没按,按1下就是4个开关的1个,按2下可能相当于实际按了0下或按2下,按3下实际按了1下或3下,之后如果是奇数,相当于按1或3下,偶数相 ...

  6. hdu-4080 Stammering Aliens 字符串hash 模板题

    http://acm.hdu.edu.cn/showproblem.php?pid=4080 求出现次数大于等于n的最长串. #include<iostream> #include< ...

  7. tmp目录自动清除和tmpwatch命令

    习惯性的将一些临时文件放在tmp目录下,让其自然删除.同时,为了保证tmp目录不爆满,系统默认情况下每日会处理一次tmp目录文件,原理就是使用了tmpwatch.在系统最小安装情况下,这个功能是没有安 ...

  8. python-flask-wtforms

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Java中获得当前静态类的类名

    通常在打印日志的时候需要输出类名,普通类可以用this.getClass(),但是静态类没有this,直接写类名耦合度高. 参考了: https://stackoverflow.com/questio ...

  10. [LeetCode] 99. Recover Binary Search Tree(复原BST) ☆☆☆☆☆

    Recover Binary Search Tree leetcode java https://leetcode.com/problems/recover-binary-search-tree/di ...