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分配和控制,可能的话,相同的端口 ...
随机推荐
- Typescript 学习笔记七:泛型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- 关于文件命名,你必须要知道的(浏览器报错:net::ERR_BLOCKED_BY_CLIENT)
坑爹的,今天在写完页面,用各个浏览器测试的时候,火狐.谷歌都是正常的,QQ浏览器出幺蛾子了,在使用兼容模式的时候页面正常,使用急速模式的时候部分页面正常,点击跳转到其他页面的时候就出错了,打开控制台一 ...
- .NET手记-定义类和接口的扩展方法
对于iOS开发者来说,使用扩展方法是家常便饭.因为有很多的类是有系统框架的定义的,我们不能修改或者不想修改他们的源码,但是我们又想要给他添加一些扩展方法来使用.这时定义扩展方法就是很有用的方式了,正如 ...
- python 特定份数的数据概率统计(原创)
使用numpy模块中的histogram函数模块 Histogram(a,bins=10,range=None,normed=False,weights=None)其中, a是保存待统计数据的数组, ...
- 高手速成android开源项目【项目篇】
主要介绍那些Android还不错的完整项目,目前包含的项目主要依据是项目有意思或项目分层规范比较好.Linux项目地址:https://github.com/torvalds/linuxAndroid ...
- android_安装包_NoClassDefFoundError
说说这个问题出现的地方吧: 能够成功的打包安装包,但是在安装包安装后,准备运行时出现了这个问题. 查看了这篇文章,讲得有理有据,并没有解决我的问题. 通过谷歌查找到这个stackoverflow,解决 ...
- Netty心跳机制
一.概念介绍网络中的接收和发送数据都是使用操作系统中的SOCKET进行实现.但是如果此套接字已经断开,那发送数据和接收数据的时候就一定会有问题.可是如何判断这个套接字是否还可以使用呢?这个就需要在系统 ...
- Docker 数据卷和数据卷容器
1.本节课主要讲解如何在Docker内部及容器之间管理数据.容器中管理数据主要有两种方式:数据卷(Data volumes)数据卷容器(Data volume containers) 2.数据卷:是一 ...
- Java对日期Date类进行日期加减运算,年份加减,月份加减
package com.cy; import java.security.InvalidParameterException; import java.text.ParseException; imp ...
- Linux 命令行下光标移动快捷键
常用的快捷键: Ctrl + u 删除光标之前到行首的字符 Ctrl + k 删除光标之后到行尾的字符 Ctrl + a 光标移动到行首 Ctrl + e 光标移动到行尾 Ctrl + l 清屏 Al ...