一、套接字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的更多相关文章

  1. 网络编程 套接字socket TCP UDP

    网络编程与套接字 网络编程 网络编程是什么: ​ 网络通常指的是计算机中的互联网,是由多台计算机通过网线或其他媒介相互链接组成的 ​ 编写基于网络的应用程序的过程序称之为网络编程. 网络编程最主要的工 ...

  2. Java网络编程(一)Socket套接字

    一.基础知识 1.TCP:传输控制协议. 2.UDP:用户数据报协议. 二.IP地址封装 1.InetAddress类的常用方法 getLocalHost() 返回本地主机的InetAddress对象 ...

  3. java网络编程ServerSocket类 和Socket类的常用构造方法及其方法

    Socket类Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号.Socket(String host, int po ...

  4. 网络---中断套接字Socket

    package socketpack_2; import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.even ...

  5. UNIX网络编程——套接字选项(心跳检测、绑定地址复用)

    /* 设置套接字选项周期性消息检测连通性 心跳包. 心博.主要用于长连接. * 参数:套接字, 1或0开启, 首次间隔时间, 两次间隔时间, 断开次数 */ void setKeepAlive( in ...

  6. c 网络与套接字socket

    我们已经知道如何使用I/O与文件通信,还知道了如何让同一计算机上的两个进程进行通信,这篇文章将创建具有服务器和客户端功能的程序 互联网中大部分的底层网络代码都是用C语言写的. 网络程序通常有两部分组成 ...

  7. UNIX网络编程——套接字选项(SOL_SOCKET级别)

    #include <sys/socket.h> int setsockopt( int socket, int level, int option_name,const void *opt ...

  8. UNIX网络编程——套接字选项(SO_REUSEADDR)

    1.一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用. SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的sock ...

  9. <网络编程>套接字介绍

    1.端口:IANA(Internet Assigned Numbers Authority)维护着一个端口号分配状况的清单. 众所周知的端口(0-1023):由IANA分配和控制,可能的话,相同的端口 ...

随机推荐

  1. Eclipse上搭建Spring的开发环境

    一.安装Spring Tool Suite插件 如图: 点击Finish之后等待安装,安装完之后弹窗点击yes重启Eclipse,重启后显示如下界面: 二.搭建Spring开发环境 1.导入jar包到 ...

  2. Testing - 软件测试知识梳理 - 理解测试

    理解 目的 测试就是要找到关键信息,有关项目和产品的关键决策都是根据这些信息做出. 对产品质量做出总体评估. 找出并报告团队所有可能会对产品价值产生消极影响的问题(但并不意味着能发现所有问题). 重心 ...

  3. 记Booking.com iOS开发岗位线上笔试

    今晚参加了Booking的iOS职位线上笔试,结束后方能简单归纳一下. 关于测试内容: Booking采用了HackerRank作为测试平台,测试总时长为75分钟,总计4道题. 测试之前我很紧张,因为 ...

  4. Liferay7 BPM门户开发之20: 理解Asset Framework

    Asset框架用于将您开发的门户内容添加Liferay的核心系统功能.打个比方,你开发了一个事件TodoList管理的插件,在列表显示的时候,你可以集成Asset框架,让你的自定义内容支持Tag标签. ...

  5. 顺序栈,链栈,队列java实现

    顺序栈 /** * 顺序栈 * */ public class SqStack { //栈的大小 private int maxSize; //栈顶指针 private int top; privat ...

  6. app测试自动化之定位元素

    app中元素定位是通过uiautomatorviewer来查看,这个是android sdk中自带的一个工具,可以在sdk家目录的tools下找到: 双击打开之后,点击第二个按钮即可把手机当前界面的元 ...

  7. [原]ZolltyMVC框架简介

    ZolltyMVC框架是一款轻量级的Java应用编程框架(Java Application Framework),融合了常用的IOC/DI.MVC(注解.XML配置式.RESTful风格.模型驱动.视 ...

  8. 课程四(Convolutional Neural Networks),第二 周(Deep convolutional models: case studies) ——3.Programming assignments : Residual Networks

    Residual Networks Welcome to the second assignment of this week! You will learn how to build very de ...

  9. Java 8 新特性-菜鸟教程 (7) -Java 8 Nashorn JavaScript

    Java 8 Nashorn JavaScript Nashorn 一个 javascript 引擎. 从JDK 1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java ...

  10. Angular2入门:TypeScript的函数 - 函数定义、可选参数、默认参数和函数重载