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分配和控制,可能的话,相同的端口 ...
随机推荐
- 使用广播-BroadcastReceiver最详细解析
女孩:BroadcastReceiver是什么呀? 男孩:Broadcast是广播的意思,在Android中应用程序之间的传输信息的机制,BroadcastReceiver是接收广播通知的组件,广播和 ...
- 机器学习技法笔记:10 Random Forest
Roadmap Random Forest Algorithm Out-Of-Bag Estimate Feature Selection Random Forest in Action Summar ...
- unity2d开发windows phone游戏按钮问题
今天在进行unity2d项目对windows phone工程的编译过程中,发现了一个很蛋疼的bug,windows phone编译运行后,GUILayout.Button出现自动点击的现象,这带来了很 ...
- 内存管理buddy[原理]
TODO------------------------------------------------------------------------------------------------ ...
- Vue2.0+组件库总结
转自:https://blog.csdn.net/lishanleilixin/article/details/84025459 UI组件 element - 饿了么出品的Vue2的web UI工具套 ...
- 阅读Google Protocol Buffers 指南,整理pb语法
官方网站: https://developers.google.com/protocol-buffers/docs/proto3 1.简单定义一个Message 类型 pb语法文件以"*.p ...
- 判断URL中的中文参数是GB2312还是Utf-8编码
如两个URL字符串: &q=%E8%A3%99%E5%AD%90&style=grid&seller_type=taobao &q=%CE%D0%C2%D6%D4%F6 ...
- mysql中的data下的数据文件(.FRM、.MYD、.MYI)恢复为数据
记一次mysql中的data文件操作经历 想拿到一个项目的最新的数据,做功能升级使用,备份一份数据同时也作为本地测试数据,文件有些大,我直接通过远程的phpmyadmin程序导出,不能愉快的玩耍,直接 ...
- N最短路径分词
N最短路径算法是一种基于词典的分词算法. 每个句子将生成一个有向无环图, 每个字作为图的一个定点, 边代表可能的分词. 在上图中, 边的起点为词的第一个字, 边的终点为词尾的下一个字. 边1表示&qu ...
- Ajax之跨域请求
一.引子 我现在开启了两个django项目,分别叫Demo1和Demo2,Demo1中有一个路径‘http://127.0.0.1:8000/index/’,对应的视图是index视图返回一个inde ...