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分配和控制,可能的话,相同的端口 ...
随机推荐
- 第十节:详细讲解一下Java多线程,随机文件
前言 大家好,给大家带来第十节:详细讲解一下Java多线程,随机文件的概述,希望你们喜欢 多线程的概念 线程的生命周期 多线程程序的设计 多线程的概念 多线程的概念:程序是静态的,进程是动态的.多进程 ...
- vue elementui 引入第三方icon iconfront
elementui框架自带icon在开发大型前端应用时显得捉襟见肘.淘宝开源的iconfront的图标库上有很多优秀的icon图标.elementui支持整合iconfront到应用中,步骤如下: 首 ...
- python 中range函数的用法
一. range(start,end,step) 二.代码 [code1] for i in range(1,10,2): print("i=",i) [result1] i= 1 ...
- Asp.net core 跨域设置
验证环境: dotnet core 2.1/Asp.net core2.1 一.作用域在中间件层 配置的方式是在startup.cs文件Configure(IApplicationBuilder a ...
- Django --需求文件requirements.txt
在虚拟环境中使用pip生成: (venv) $ pip freeze >requirements.txt 当需要创建这个虚拟环境的完全副本,可以创建一个新的虚拟环境,并在其上运行以下命令: (v ...
- Python --代码风格检查 pep8
pip3 install pycodestyle pycodestyle .. Pep8编码规范 https://blog.csdn.net/ratsniper/article/details/789 ...
- list源码1(参考STL源码--侯捷):list节点、迭代器、数据结构
list源码1(参考STL源码--侯捷):list节点.迭代器.数据结构 list源码2(参考STL源码--侯捷):constructor.push_back.insert list源码3(参考STL ...
- JAVA基础 <一>
java基础的学习要领,多写多写. 学习方法很简单,了解 到 理解 到 熟悉 到 精通 先讲变量吧: public static void main(String[] args) { int ...
- Python中property的使用
- 【jQuery源码】整体架构
jQuery源码可以精简为以下内容: 方框上面的代码根据Jq注释我们可以知道是对AMD规范的支持. jQuery整体上被包裹在一个匿名函数中,这个匿名函数再作为另一个匿名函数的参数被传入,形参fact ...