socket

TCP文件上傳案例測試

一曲冷凌霜 提交于 2020-01-31 20:22:53
package IOStream ; import java . io . * ; import java . net . ServerSocket ; import java . net . Socket ; /** * 服務器拿到網絡流傳輸的文件 * 通過本地流寫入磁盤 * 調用網絡輸出流返回成功信息 */ public class TCPServer02 { public static void main ( String [ ] args ) throws IOException { ServerSocket serverSocket = new ServerSocket ( 8888 ) ; Socket socket = serverSocket . accept ( ) ; File file = new File ( "C:\\Users\\ASUS\\Desktop\\新建文件夹2" ) ; if ( ! file . exists ( ) ) { file . mkdirs ( ) ; } InputStream inputStream = socket . getInputStream ( ) ; FileOutputStream fos = new FileOutputStream ( file + "\\test2.jpg" ) ; int i = 0 ;

Java中bio编程

我与影子孤独终老i 提交于 2020-01-31 19:34:22
网络编程(Socket)概念 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 socket。 建立网络通信连接至少要一个端口号。socket 本质是编程接口(API),对 TCP/IP 的封装, TCP/IP 也要提供可供程序员做网络开发所用的接口,这就是 Socket 编程接口;HTTP 是轿车, 提供了封装或者显示数据的具体形式;Socket 是发动机,提供了网络通信的能力。 Socket 连接步骤 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三 个步骤:服务器监听,客户端请求,连接确认。【如果包含数据交互+断开连接,那么一共是 五个步骤】 (1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连 接的状态,实时监控网络状态。 (2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的 套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套 接字的地址和端口号,然后就向服务器端套接字提出连接请求。 (3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求, 它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端, 一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接

android thread / udp socket sample

旧城冷巷雨未停 提交于 2020-01-31 10:53:05
class EventReadThread extends Thread { boolean socketCreated = false; DatagramSocket socket; InetAddress serverAddress; byte dataIn[] = new byte[1024]; private void Delay(int ms) { try { Thread: sleep(ms); } catch (Exception e) { e.printStackTrace(); } } public void run() { while (mThreadQuitFlag == 0) { Delay(2000); if (socketCreated == false) { try { socket = new DatagramSocket(4599); serverAddress = InetAddress.getByName("192.168.0.23");//127.0.0.1"); String str = "gmx ls"; byte data[] = str.getBytes(); DatagramPacket packet = new DatagramPacket(data, data.length, serverAddress, 4568);

Udp简单的服务器与客户端07

爷,独闯天下 提交于 2020-01-31 10:52:31
UDP协议: UDP协议传输数据是不可靠的,在java中,java.util.DatagramSocket负责接收和发送UDP数据报,java.util.DatagramPacket表示UDP数据表。每个 DatagramSocket与一个本底地址绑定,每个DatagramSocket可以把UDP数据报发送给任意一个远程DatagramSocket,也可以接收来自任意一个远程的 DatagramSocket的UDP数据报。在UDP数据报中包含了目的地址信息,DatagramSocket根据该信息把数据报发送到目的地 UDP服务端 public class EchoServer{ private int port = 8089; private DatagramSocket socket; public EchoServer()throws IOException{ socket = new DatagramSocket(port); System.out.println("服务端启动"); } public String ehco(String msg){ return "ehco:"+msg; } public void service(){ while(true){ try { //创建一个数据报对象 DatagramPacket packet = new

Tcp/Ip协议

假如想象 提交于 2020-01-31 07:22:32
网络由下往上分为: 物理层-- 数据链路层-- 网络层-- IP协议 传输层-- TCP协议 会话层-- 表示层和应用层-- HTTP协议 1、TCP/IP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。 建立起一个TCP连接需要经过“三次握手”: 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开). 2、HTTP连接

Java socket实现简易聊天

你离开我真会死。 提交于 2020-01-31 02:59:48
效果图: ** 服务端 ** public class MyServer { public static void main ( String [ ] args ) { //创建到特定服务端口的套接字0-655535, int port = 10086 ; try { ServerSocket serverSocket = new ServerSocket ( port ) ; System.out.println ( "server is running at" +serverSocket.getLocalSocketAddress ( )) ; //建立套接字,获取socket对象 Socket socket = serverSocket.accept ( ) ; System.out.println ( "one client has connected the server," +socket.getRemoteSocketAddress ( )) ; //收据接收和发送 while ( true ) { //接受 InputStream is = socket.getInputStream ( ) ; Scanner scanner = new Scanner ( is ) ; String str = scanner.nextLine ( ) ; System.out

通过 Socket 实现 TCP 编程

前提是你 提交于 2020-01-30 18:18:30
Socket通信: TCP协议是面向连接的、可靠的、有序的,以字节流的方式发送数据 基于TCP协议实现网络通信的类   客户端的Socket类   服务器端的ServerSocket类 Socket通信实现步骤   1.创建ServerSocket和Socket   2.打开连接到Socket的输入、输出流   3.按照协议对Socket进行读/写操作   4.关闭输入输出流、关闭Socket 服务器端:   创建ServerSocket对象,绑定监听端口   通过accept()方法监听客户端请求   连接建立后,通过输入流读取客户端发送的请求信息   通过输出流向客户端发送响应信息   关闭相关资源 客户端:   创建Socket对象,指明需要连接的服务器的地址和端口号   连接建立后,通过输出流向服务器端发送请求信息   通过输入流获取服务器响应的信息   关闭相关资源 应用多线程来实现服务器与多客户端之间的通信   基本步骤   1.服务器端创建ServerSocket,循环调用accept()等待客户端连接   2.客户端创建一个socket并请求和服务器端连接   3.服务器端接收客户端请求,创建socket与该客户建立专线连接   4.建立连接的两个socket在一个单独的线程上对话 /* * 基于TCP协议的Socket通信,实现用户登陆 * 服务器端 */

[Netty学习笔记]一、I/O模型

冷暖自知 提交于 2020-01-30 13:47:49
I/O模型 I/O模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。 Java共支持是三种网络编程模型:BIO/NIO/AIO BIO模型 Java BIO:同步阻塞(传统阻塞型),服务器实现模式是一个连接一个线程,即 客户端有连接请求时服务器端就需要启动一个线程来进行处理。如果这个连接不做任何事情就会造成不必要的线程开销 其中BIO常用的编程对象即 ServerSocket 和 Socket ,分别对应服务端和客户端。 需要了解的是 ServerSocket#accept 方法是阻塞的,没有客户端连接进来会一直阻塞在那里。 InputStream#read也是一个阻塞方法,如果没有内容可读的话,会阻塞在那里 以一个例子,来理解 客户端有连接请求时,服务端会创建一个与之对应的线程,并且这个连接不做任何事情也不会被断开,会造成不必要的线程开销 /** * Created by myk * 2020/1/6 下午2:19 * 使用BIO模型编写一个服务器端,监听6666端口,当有客户端连接时,就启动一个线程与之通讯。 */ public class Server { private static int PORT = 6666 ; public static void main ( String [ ] args ) throws

JAVA单排日记-2020/1/30-网络编程_TCP通信

断了今生、忘了曾经 提交于 2020-01-30 13:45:40
1.概述 TCP通信能实现两台计算机之间的数据( 字节流 )交互,通信的两端,要严格区分为 客户端(Client)与服务端(Server) 两端通信时步骤: 服务端程序,需要事先启动,等待客户端的连接。 客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端。 2.TCP通信的代码实现 2.1客户端 Socket 类 Socket 类:该类实现客户端套接字。套接字指的是两台设备之间通讯的端点,是包含了IP和端口号的网络单位。 构造方法 Socket s1 = new Socket ( String 服务器IP , int 服务器端口号 ) ; 成员方法 服务器与客户端不能创建自己的流对象交互,必须使用以下 Socket 类中提供的成员方法 OutputStream out = s1 . getOutputStream ( ) ; 获取字节输出流 InputStream in = s1 . getInputStream ( ) ; 获取字节输入流 s1 . close ( ) ; 关闭套接字 使用步骤 1.创建 Socket 类对象,构造方法中填入服务器的IP与端口号 2.使用 Socket 对象的 getOutputStream() 方法,获取网络字节输出流 OutputStream 对象 3.使用 OutputStream 对象的 write() 方法

Linux Kernel 2.6.9源码分析 -- listen

只谈情不闲聊 提交于 2020-01-30 13:23:14
Linux Kernel 2.6.9源码分析 – listen 先来看下listen的原型:int listen(int sockfd, int backlog); 参数说明: sockfd :要监听的socket描述字 backlog :为相应socket可以排队的最大连接个数 返回值 :返回错误码 对于有链接的socket对子,如何来系统如何来区分谁是server,谁是client呢 ?只要在创建socket的时候有调用listen接口,此socket就成为了server socket.凡是server socket都不能主动去与别的socket建立连接,而只能被动地通过accept()来接受来自client socket的请求.而client socket刚好相反,不能调用accept()来接受连接请求,而只能主动地通过connect()提出连接请求. 下面来看下系统调用sys_listen如何实现这一功能 ? asmlinkage long sys_listen ( int fd , int backlog ) { struct socket * sock ; int err ; if ( ( sock = sockfd_lookup ( fd , & err ) ) != NULL ) { if ( ( unsigned ) backlog > sysctl