Java网络编程--套接字Socket
一、套接字Socket
IP地址标志Internet上的计算机,端口号标志正在计算机上运行的进程(程序)。
端口号被规定为一个16位的0--65535之间的整数,其中,0--1023被预先定义的服务通信占用。
当两个程序需要通信时,可以通过Socket类建立套接字对象并连接在一起。(端口号与IP地址的组合得出的一个网络套接字)
二、示例
(1)客户端服务器端一对一;聊天
package mychat; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException; public class Client { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Socket client = null;
//读服务器说的话
BufferedReader br = null;
//写个服务器
BufferedWriter bw = null;
//读键盘
BufferedReader input = null;
try {
client = new Socket("127.0.0.1",);
while(true)
{
//从键盘写
System.out.println("客户端说:");
input = new BufferedReader(new InputStreamReader(System.in));
String str = input.readLine();
//写给服务器
bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
bw.write(str);
bw.newLine();
bw.flush();
//接受服务器信息
br = new BufferedReader(new InputStreamReader(client.getInputStream()));
String line =null;
line = br.readLine();
System.out.println("服务器说"+line);
} } catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
Client.java客户端
package mychat; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket; public class Server { public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedReader input = null;
BufferedWriter bw =null;
BufferedReader br = null;
Socket socket = null;
try {
ServerSocket server = new ServerSocket(); System.out.println("等待客户端响应");
socket = server.accept();
System.out.println("与客户端建立连接");
//读
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//写
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
input = new BufferedReader(new InputStreamReader(System.in)); while(true)
{
String line = br.readLine();
System.out.println("客户端说:"+line);
//写 System.out.println("请输入服务器说的话");
String str = input.readLine();
bw.write(str);
bw.newLine();
bw.flush();
System.out.println("服务器说:"+str);
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
} }
Server.java服务器端
(2)客户端上传文件(字符)
package loadzifu; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException; public class Client { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Socket client = null;
//读文件名
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
//读本地文件
File f=null;
BufferedReader brFile = null;
BufferedWriter bw = null;
try {
client = new Socket("127.0.0.1",);
bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
System.out.println("请输入要上传的文件");
String fileName = input.readLine();
brFile = new BufferedReader(new FileReader(("src/chat/"+fileName)));
String line =null;
while((line= brFile.readLine())!=null)
{
//写个客户端
bw.write(line);
bw.newLine();
bw.flush(); } } catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
brFile.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } }
Client.java客户端
package loadzifu; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket; public class Server { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ServerSocket server = null;
Socket socket = null;
BufferedReader br =null;
BufferedWriter bwFile = null;
try {
server = new ServerSocket();
System.out.println("等待客户端连接");
socket = server.accept();
System.out.println("与客户端建立连接");
File f = new File("src/loadzifu/a.txt");
bwFile = new BufferedWriter(new FileWriter(f));
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = null;
while((str=br.readLine())!=null)
{
bwFile.write(str);
bwFile.newLine();
bwFile.flush();
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
bwFile.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } }
Server.java服务器端
(3)客户端上传文件(字节)
package loadzijie; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException; public class Client { public static void main(String[] args) {
// TODO Auto-generated method stub
Socket client = null;
//读文件
BufferedInputStream bisFile = null;
//源文件
File f = null;
//读键盘
BufferedReader input = null;
//写个服务器
BufferedOutputStream bos = null;
try {
client = new Socket("127.0.0.1",); System.out.println("请输入要复制的文件");
input = new BufferedReader(new InputStreamReader(System.in));
String fileName = input.readLine();
f = new File("src/chat/"+fileName);
//读文件
bisFile = new BufferedInputStream(new FileInputStream(f));
bos = new BufferedOutputStream(client.getOutputStream());
int len=;
byte bytes[] = new byte[];
while((len=bisFile.read(bytes))!=-)
{
bos.write(bytes,,len);
bos.flush();
} } catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
bisFile.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } }
Client.java客户端
package loadzijie; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; public class Server { public static void main(String[] args) {
// TODO Auto-generated method stub
ServerSocket server = null;
Socket socket = null;
File f = null;
BufferedInputStream bis = null;
BufferedOutputStream bosFile = null; try {
server = new ServerSocket();
System.out.println("等待客户端连接");
socket = server.accept();
System.out.println("与客户端建立连接");
f = new File("src/loadzijie/dd.bmp");
bis = new BufferedInputStream(socket.getInputStream());
bosFile = new BufferedOutputStream(new FileOutputStream(f));
int len =;
byte bytes[] = new byte[];
while((len = bis.read(bytes))!=-)
{
//写文件
bosFile.write(bytes,,len);
bosFile.flush(); }
System.out.println("上传成功"); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
bis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
bosFile.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }
Server.java服务器端
(4)服务器端多线程接受客户端文件
package loadget; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException; public class Client { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Socket client = null;
File f = null;
//读键盘
BufferedReader input = null;
//读文件
BufferedInputStream brFile = null;
//上传服务器
BufferedOutputStream bos = null;
try {
client = new Socket("127.0.0.1",);
System.out.println("请输入要上传的文件");
input = new BufferedReader(new InputStreamReader(System.in));
String fileName = input.readLine();
bos = new BufferedOutputStream(client.getOutputStream());
f = new File(("src/chat/"+fileName));
//读文件
brFile = new BufferedInputStream(new FileInputStream(f));
int len =;
byte bytes[]= new byte[];
while((len=brFile.read(bytes))!=-)
{
bos.write(bytes,,len);
bos.flush();
} } catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
bos.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
brFile.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } }
Client.java客户端
package loadget; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; public class Server { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ServerSocket server = null;
//接受文件 try {
server = new ServerSocket(); while(true)
{ System.out.println("等待与客户端连接");
final Socket sock = server.accept();
System.out.println("与客户端建立连接");
new Thread(new Runnable() {
BufferedInputStream bis = null;
//写文件
BufferedOutputStream bos =null;
@Override
public void run() {
// TODO Auto-generated method stub
try { bis = new BufferedInputStream(sock.getInputStream());
int a = (int)(Math.random()*+);
System.out.println("a:"+a);
File fileName = new File("src/loadget/a.txt");
bos = new BufferedOutputStream(new FileOutputStream(fileName));
int len =;
byte bytes[] = new byte[];
while((len=bis.read(bytes))!=-)
{
bos.write(bytes,,len);
bos.flush();
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
bis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
sock.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
}).start();
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Server.java服务器端
Java网络编程--套接字Socket的更多相关文章
- 网络编程 套接字socket TCP UDP
网络编程与套接字 网络编程 网络编程是什么: 网络通常指的是计算机中的互联网,是由多台计算机通过网线或其他媒介相互链接组成的 编写基于网络的应用程序的过程序称之为网络编程. 网络编程最主要的工 ...
- Java网络编程(一)Socket套接字
一.基础知识 1.TCP:传输控制协议. 2.UDP:用户数据报协议. 二.IP地址封装 1.InetAddress类的常用方法 getLocalHost() 返回本地主机的InetAddress对象 ...
- java网络编程ServerSocket类 和Socket类的常用构造方法及其方法
Socket类Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号.Socket(String host, int po ...
- 网络---中断套接字Socket
package socketpack_2; import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.even ...
- UNIX网络编程——套接字选项(心跳检测、绑定地址复用)
/* 设置套接字选项周期性消息检测连通性 心跳包. 心博.主要用于长连接. * 参数:套接字, 1或0开启, 首次间隔时间, 两次间隔时间, 断开次数 */ void setKeepAlive( in ...
- c 网络与套接字socket
我们已经知道如何使用I/O与文件通信,还知道了如何让同一计算机上的两个进程进行通信,这篇文章将创建具有服务器和客户端功能的程序 互联网中大部分的底层网络代码都是用C语言写的. 网络程序通常有两部分组成 ...
- UNIX网络编程——套接字选项(SOL_SOCKET级别)
#include <sys/socket.h> int setsockopt( int socket, int level, int option_name,const void *opt ...
- UNIX网络编程——套接字选项(SO_REUSEADDR)
1.一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用. SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的sock ...
- <网络编程>套接字介绍
1.端口:IANA(Internet Assigned Numbers Authority)维护着一个端口号分配状况的清单. 众所周知的端口(0-1023):由IANA分配和控制,可能的话,相同的端口 ...
随机推荐
- JS应用实例1:注册页面表单校验
这里是简单的前端校验,后边还会介绍后台的校验. 多重校验保证获取安全数据 步骤: 1.确定事件onsubmit,并绑定函数 2.编写函数,作用是获取输入数据 3.判断数据是否合法,合法则提交,否则表单 ...
- MySQL长度、大小写验证问题[开发篇]
实际情况是这样的,从外部读取数据,然后存入数据库,要求不能重复存入数据. 由于以前的系统里没有加唯一键,所以,就只有手动判断相同记录是否存在了. case1.由于其中某个值存在为空情况,而存入时该值变 ...
- 视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频
视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频 2018-07-11 | 标签»下载, 下载工具, 视频 又是视频下载,老生常谈的话题.阿刚同学已在乐软博客多次与大家分享推荐 ...
- 机器学习基石笔记:12 Nonlinear Transformation
一.二次假设 实际上线性假设的模型复杂度是受到限制的, 需要高次假设打破这个限制. 假设数据不是线性可分的,但是可以被一个圆心在原点的圆分开, 需要我们重新设计基于该圆的PLA等算法吗? 不用, 只需 ...
- Java开发技术大揭底——让你认知自己技术上的缺陷,成为架构师
一.分布式架构体系 分布式怎么来的.传统的电信.银行业,当业务量大了之后,普通服务器CPU/IO/网络到了100%,请求太慢怎么办?最直接的做法,升级硬件,反正也不缺钱,IBM小型机,大型机,采购了堆 ...
- 高德地图添加marker及反地理编码获取POI
项目中集成百度.高德.腾讯地图已是司空见惯的事情,今天我总结了一下项目中用到的高德地图常用的功能: 1.展示高德地图并定位显示定位图标: 2.添加实时大头针: 3.反地理编码获取周围兴趣点 效果如下: ...
- [疑难杂症]__点击win10屏幕最上方的边界会莫名其妙打开Internet Explorer浏览器,不胜其烦(2次ps:已解决!!!).
关于问题描述: 每次误点到屏幕上边界会莫名打卡Internet Explorer浏览器(一开始开以为是自带的Edge浏览器,后来在查找相关解决方法的时候才发现并不是同一款浏览器) 这个问题存在好久了, ...
- kaggle-Digit Recognizer
安装kaggle工具获取数据源(linux 环境) 采用sklearn的KNeighborsClassifier训练数据 通过K折交叉验证来选取K值是正确率更高 1.安装kaggle,获取数据源 pi ...
- leetcode — container-with-most-water
/** * Source : https://oj.leetcode.com/problems/container-with-most-water/ * * Created by lverpeng o ...
- ubuntu server 14.04 LTS下搭建LAMP环境之最详细笔记之一U盘安装双系统
前言: 一直在WIN上使用PHP,不喜欢用WAMP,每次都是手动在windows配置环境,偶尔有一次装了小红帽玩了两天,感觉不是很习惯就换了回来,过了没几天见讨论LAMP环境,于是安装了ubuntu的 ...