套接字技术java_java网络编程之套接字TCP
套接字学习
什么是套接字?
计算机网络基础知识
基于套接字的网路编程案例?
什么是套接字?
所谓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相关推荐
- java 套接字 访问tcp_Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信
套接字Socket的引入 为了能够方便地开发网络应用软件,由美国伯克利大学在Unix上推出了一种应用程序访问通信协议的操作系统用调用socket(套接字). socket的出现,使程序员可以很方便地访 ...
- TCP/IP网络编程---Linux系统下的TCP套接字编程
目录 第一章 理解网络编程和套接字 1.1 网络编程和套接字概要 1.2 基于Linux的文件操作 1.2.1 底层文件访问和文件描述符 1.2.2 打开文件 1.2.3 关闭文件 1.2.4 将数据 ...
- [python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例
很早以前研究过C#和C++的网络通信,参考我的文章: C#网络编程之Tcp实现客户端和服务器聊天 C#网络编程之套接字编程基础知识 ...
- Linux原始网络编程,Linux操作系统网络编程 原始套接字 (1)
Linux操作系统网络编程--原始套接字 (1) http://soft.zdnet.com.cn/software_zone/2007/1020/568223.shtml 我们在前面已经学习过了网络 ...
- Linux网络编程——原始套接字编程
Linux网络编程--原始套接字编程 转自:http://blog.csdn.net/tennysonsky/article/details/44676377 原始套接字编程和之前的 UDP 编程差不 ...
- python socket清空接收缓冲区_Python网络编程——修改套接字发送和接收的缓冲区大小...
很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...
- TCP/IP网络编程:P1->理解网络编程和套接字
本系列文章为<TCP/IP网络编程----尹圣雨>学习笔记 文章目录 一.理解网络编程和套接字 1.1 构建接电话套接字 1.2 编写"Hello world!"服务器 ...
- C# 网络编程之套接字编程基础知识
最近阅读了周存杰编写的<C#网络编程实例教程>并阅读了很多相关方面的资料,同时自己也做了一些套接字编程方面的C#程序,所以根据它的知识总结了最近的套接字编程的一些知识点,方便自己的理解与他 ...
- Linux网络编程之套接字基础
Linux网络编程之套接字基础 1.套接字的基本结构 struct sockaddr 这个结构用来存储套接字地址. 数据定义: struct sockaddr { unsigned short sa_ ...
最新文章
- Cocos2d-x3.2 重力感应
- EL表达式的11隐含对象
- c语言自学门槛,初学C语言的人最常问的几个问题
- c#常用类库----计算机信息类
- 使用SQL向SQL Server2005中插入图片
- PyTorch 1.4 中文文档校对活动正式启动 | ApacheCN
- 黑莓8330、8830写号,上网,输入法,汉化
- 食品品牌最全VI目录 - 塔望食品品牌全案策划VI设计清单
- VUE引入阿里icon
- 湘源里面关于缩放的问题
- python分析:中国五大城市PM2.5数据分析
- 计算机二级电子表格使用技巧36种,Excel表格的基本操作(精选36个技巧)
- 纷享销客罗旭对话元气森林黄晓枫:零售数字化的终点不是创新,而是数据
- 字符编码那些事--彻底理解掌握编码知识
- 支付宝里面基金的猫腻?为什么计算对不上?
- Package ‘polycor’
- 基层管理者必备的能力和素质
- 【SQL语法基础】数据过滤:SQL数据过滤都有哪些方法?
- vue简单实现无缝滚动
- 关于visual studio下载过慢的问题