套接字学习

什么是套接字?

计算机网络基础知识

基于套接字的网路编程案例?

什么是套接字?

所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程

序通常通过"套接字"向网络发出请求或者应答网络请求。

套接字可以根据通信性质分类,这种性质对于用户是可见的。应用程序一般仅在同一类的

套接字间进行通信。不过只要底层的通信协议允许,不同类型的套接字间也照样可以通信。套

接字有两种不同的类型:流套接字和数据报套接字。

计算机网络基础知识

什么是技术机网络:

通过有线/无线的链路连接多个计算机设备

进行数据通信或设备共享

标识:

物理: MAC 芯片(网卡/网络适配器/蓝牙/WIFI)

逻辑:IP地址

IP v4 2^32

IP v6 2^128

端口号:port

2^16 0~65535 65536

1024(已占用的端口数目)

http,ftp,ssh,pop,smtp,默认占用了端口(eg:80web端口)

网络通信中标识的网络服务

TCP/IP

应用层 HTTP/HTTPS/pop3/SMTP/SSH/FTP/自定义

传输层 TCP/UDP (套接字)

TCP 传输控制协议

UDP 用户数据报协议

网络层 IP协议

物理层/数据链路层

注意:

后面的博客将会写出TCP/IP学习分享

基于套接字的网路编程案例?

使用线程池实现客户端与服务器的通信,客户端给服务器发送一个字符串,服务器做反转后再发送给客户端.(下面给出一个简单的例子)

客户端程序:

package cn.csuft.poorguy.fileserver;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.InetAddress;

import java.net.Socket;

import java.net.UnknownHostException;

/**

* 客户端

*

* @author Bug研发工程师

*

*/

public class Client {

// 服务器端口

int port = 9000;

// 服务器地址

InetAddress address;

// 客户端TCP套接字

Socket socket;

public Client() {

try {

address = InetAddress.getByName("127.0.0.1");

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

try {

socket = new Socket(address, port);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void start() {

// 先发送

// 再接受字符传反转或变成大写再发送回来

// 服务端实现反转再发回去

// 服务器将小写

try (OutputStream out = socket.getOutputStream()) {

String s = "hello";

out.write(s.getBytes());

out.flush();

InputStream in = socket.getInputStream();

byte[] buf = new byte[128];

int size = in.read(buf);

// String now = new String(buf, 0, size);

// System.out.println("当前时间: " + now);

String s_reverse = new String(buf, 0, size);

System.out.println("转置的结果是: " + s_reverse);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static void main(String[] args) {

Client client = new Client();

Client client1 = new Client();

Client client2 = new Client();

client.start();

client1.start();

client2.start();

}

}

服务器端程序:

package cn.csuft.poorguy.fileserver;

import java.io.IOException;

import java.io.OutputStream;

import java.net.InetAddress;

import java.net.ServerSocket;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.Date;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

/**

* 文件服务器(Server)

* 软件:提供服务(对(客户端)请求提供相应)的程序

* @author Bug研发工程师

*

*/

public class FileServer {

//地址

//IP

InetAddress address;

//Port 端口

int port = 9000;

//套接字

//Socket socket

ServerSocket serverSocket;

ExecutorService pool;

public FileServer() {

try {

address = InetAddress.getByName("127.0.0.1");

//for(InetAddress ads : InetAddress.getAllByName("www.baidu.com")) {

//System.out.println(ads.getHostAddress());

//}

} catch (UnknownHostException e) {

e.printStackTrace();

}

//创建服务端套接字

//在当前主机

try {

serverSocket = new ServerSocket(port);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static void main(String[] args) {

FileServer server = new FileServer();

server.start();

}

public void start() {

pool = Executors.newCachedThreadPool();

//接受客户端的请求

System.out.println("服务器启动...");

while(true) {

try {

Socket s = serverSocket.accept();

pool.execute(new TimeService(s));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

多线程程序:

package cn.csuft.poorguy.fileserver;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.Socket;

import java.util.Date;

public class TimeService implements Runnable{

Socket socket;

public TimeService() {

}

public TimeService(Socket socket) {

this.socket = socket;

}

/**

* 字符串转置

* @param s

* @return

*/

private String reverse(String s) {

char []arr = s.toCharArray();

int limit = arr.length-1;

int middle = arr.length>>1;

for(int i=0;i

char temp = arr[i];

arr[i] = arr[limit-i];

arr[limit-i] = temp;

}

System.out.println(new String(arr));

return new String(arr);

}

@Override

public void run() {

String now = new Date().toLocaleString();

System.out.println(Thread.currentThread().getName()+"处理"+socket.getPort());

try (OutputStream out = socket.getOutputStream()){

InputStream in = socket.getInputStream();

byte []buf = new byte[1024];

int size = in.read(buf);

String s = new String(buf,0,size);

s = reverse(s);

out.write(s.getBytes());

out.flush();

//out.close();

} catch (Exception e) {

// TODO: handle exception

}

}

}

上面是简单的套接字使用的程序,如果有问题请指出,谢谢

套接字技术java_java网络编程之套接字TCP相关推荐

  1. java 套接字 访问tcp_Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信

    套接字Socket的引入 为了能够方便地开发网络应用软件,由美国伯克利大学在Unix上推出了一种应用程序访问通信协议的操作系统用调用socket(套接字). socket的出现,使程序员可以很方便地访 ...

  2. TCP/IP网络编程---Linux系统下的TCP套接字编程

    目录 第一章 理解网络编程和套接字 1.1 网络编程和套接字概要 1.2 基于Linux的文件操作 1.2.1 底层文件访问和文件描述符 1.2.2 打开文件 1.2.3 关闭文件 1.2.4 将数据 ...

  3. [python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例

    很早以前研究过C#和C++的网络通信,参考我的文章:                  C#网络编程之Tcp实现客户端和服务器聊天                 C#网络编程之套接字编程基础知识   ...

  4. Linux原始网络编程,Linux操作系统网络编程 原始套接字 (1)

    Linux操作系统网络编程--原始套接字 (1) http://soft.zdnet.com.cn/software_zone/2007/1020/568223.shtml 我们在前面已经学习过了网络 ...

  5. Linux网络编程——原始套接字编程

    Linux网络编程--原始套接字编程 转自:http://blog.csdn.net/tennysonsky/article/details/44676377 原始套接字编程和之前的 UDP 编程差不 ...

  6. python socket清空接收缓冲区_Python网络编程——修改套接字发送和接收的缓冲区大小...

    很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...

  7. TCP/IP网络编程:P1->理解网络编程和套接字

    本系列文章为<TCP/IP网络编程----尹圣雨>学习笔记 文章目录 一.理解网络编程和套接字 1.1 构建接电话套接字 1.2 编写"Hello world!"服务器 ...

  8. C# 网络编程之套接字编程基础知识

    最近阅读了周存杰编写的<C#网络编程实例教程>并阅读了很多相关方面的资料,同时自己也做了一些套接字编程方面的C#程序,所以根据它的知识总结了最近的套接字编程的一些知识点,方便自己的理解与他 ...

  9. Linux网络编程之套接字基础

    Linux网络编程之套接字基础 1.套接字的基本结构 struct sockaddr 这个结构用来存储套接字地址. 数据定义: struct sockaddr { unsigned short sa_ ...

最新文章

  1. Cocos2d-x3.2 重力感应
  2. EL表达式的11隐含对象
  3. c语言自学门槛,初学C语言的人最常问的几个问题
  4. c#常用类库----计算机信息类
  5. 使用SQL向SQL Server2005中插入图片
  6. PyTorch 1.4 中文文档校对活动正式启动 | ApacheCN
  7. 黑莓8330、8830写号,上网,输入法,汉化
  8. 食品品牌最全VI目录 - 塔望食品品牌全案策划VI设计清单
  9. VUE引入阿里icon
  10. 湘源里面关于缩放的问题
  11. python分析:中国五大城市PM2.5数据分析
  12. 计算机二级电子表格使用技巧36种,Excel表格的基本操作(精选36个技巧)
  13. 纷享销客罗旭对话元气森林黄晓枫:零售数字化的终点不是创新,而是数据
  14. 字符编码那些事--彻底理解掌握编码知识
  15. 支付宝里面基金的猫腻?为什么计算对不上?
  16. Package ‘polycor’
  17. 基层管理者必备的能力和素质
  18. 【SQL语法基础】数据过滤:SQL数据过滤都有哪些方法?
  19. vue简单实现无缝滚动
  20. 关于visual studio下载过慢的问题

热门文章

  1. 蓝屏代码0X0000007B的解决办法
  2. Java语音怎么输出翼型_使用ICEM CFD建立二维翼型流场网格
  3. idea2018永久破解
  4. 25款最佳响应式HTML5前端开发框架
  5. UNcrackable-Level1绕过root检测
  6. QT5开发之 信号与槽机制
  7. 双鱼男最需要找什么样的女人做老婆?
  8. 步进电机c语言源代码 stm32,stm32 42步进电机基本旋转实现内含源代码
  9. Django 2.1.3 模型层 模型
  10. java按键事件空格_java键盘事件 空格键