TCP(Socket基础编程)
1、TCP特点:
面向连接、可靠安全、传输量大、速度较慢
2、socket编程主要依靠两个类:socket 、serversocket
example1:客户端可以不停输入字符串,服务端返回字符串的大写
客户端代码:
public static void main(String[] args) throws Exception{
//建立socket连接 连接一旦建立成功 就可以获得 输入流 和 写出流
Socket s = new Socket(InetAddress.getLocalHost(),10001);
//客户端从键盘输入字符
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//从服务端获取的输入流,可以获取从服务端返回的信息
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
//写出流 方式一 把信息发送到服务端
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
//写出流 方式二
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line = null;
while((line=br.readLine())!=null){
//写到服务端 方式一
pw.println(line);
//写到服务端 方式二
/*
bw.write(line);
bw.newLine();
bw.flush();
*/
//读取服务端返回信息(这是一个阻塞方法)
String result = in.readLine();
System.out.println(result);
}
s.close();
br.close();
}
服务端代码:
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10001);
while(true){
//此方法是阻塞式方法
Socket s = ss.accept();
//服务端这儿需要使用线程 每次接受一个客户端就为其开启一个线程,防止多个客户端访问出现阻塞情况
new Thread(new ServerThread(s)).start();
}
}
class ServerThread implements Runnable{
private Socket socket;
public ServerThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
System.out.println(socket.getInetAddress().getHostAddress()+"is connecting");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter pw = new PrintWriter(socket.getOutputStream(),true);
String line =null;
while((line = br.readLine())!=null){
//如果接收到结束标志 则结束
if("over".equals(line)){
break;
}
System.out.println(line);
pw.println(line.toUpperCase());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Example2:上传文件——客户端将文件内容写到服务端,服务端 将内容保存到其他位置,实现从服务端上传文件的功能
客户端代码:
public static void main(String[] args) throws Exception {
Socket s = new Socket(InetAddress.getLocalHost(),10001);
BufferedReader br = new BufferedReader(new FileReader(new File("D:/baichuanyu/HelloWorld/src/com/action/Hello.java")));
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
String line = null;
while((line=br.readLine())!=null){
pw.println(line);
}
//文件内容写到服务器完成后,服务端没有接受到结束标志,会继续readline()下去
//通过shutdownOutput()方法 可以向服务器写-1结束标志 从而结束服务端的readline()方法
s.shutdownOutput();
String result = in.readLine();
System.out.println(result);
s.close();
br.close();
}
服务端代码:
class UploadThread implements Runnable{
private Socket socket;
public UploadThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
System.out.println(socket.getInetAddress().getHostAddress()+" is connecting....");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter pw = new PrintWriter(new FileWriter(new File("E:\\Hello.txt")),true);
PrintWriter os = new PrintWriter(socket.getOutputStream(),true);
String line =null;
while((line = br.readLine())!=null){
pw.println(line);
}
os.println("over");
pw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10001);
while(true){
//此方法是阻塞式方法
Socket s = ss.accept();
//服务端这儿需要使用线程 每次接受一个客户端就为其开启一个线程,防止多个客户端访问出现阻塞情况
new Thread(new UploadThread(s)).start();
}
}
TCP(Socket基础编程)的更多相关文章
- 【Socket】Java Socket基础编程
Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...
- 再次回首 TCP Socket服务器编程
转载:http://www.cnblogs.com/zc22/archive/2010/06/27/1766007.html ------------------ 前言 --------------- ...
- 经过一年时间的沉淀 再次回首 TCP Socket服务器编程--转
------------------ 前言 ------------------ 开发了这么多年,发现最困难的程序开发就是通讯系统. 其他大部分系统,例如CRM/CMS/权限框架/MIS之类的,无论怎 ...
- C#网络程序设计(2)Socket基础编程
本节介绍如何使用基础Socket实现TCP通信. (1)Socket详细介绍: Socket的英文原义是"孔"或"插座".通常称作"套 ...
- 经过一年时间的沉淀 再次回首 TCP Socket服务器编程 (二)
------------------ 前言 ------------------ 发了第一篇文章后,有不少同志留言,看来socket编程仍然是软件系统里面一个比较难的部分. 第一篇文章主要介绍了传输协 ...
- Socket基础编程
地址结构sockaddr_in 其中包含:IP地址,端口号,协议族推荐使用sockaddr_in,而不建议使用sockaddrsockaddr_in与sockaddr是等价的,但sockaddr_in ...
- socket基础编程-1
server端和client端 1.server端: import socket server=socket.socket() server.bind(('localhost',8080)) serv ...
- socket基础编程-2
client端: import socket while True: client=socket.socket(socket.ANET,socket.SOCK_STREAM) client.conne ...
- C++ SOCKET 基础编程
{ http://c.biancheng.net/socket/ }
随机推荐
- Codeforces Gym101473 F.Triangles-前缀和 (2013-2014 ACM-ICPC Brazil Subregional Programming Contest)
前缀和. 代码: 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include< ...
- noip2017集训测试赛(四)Problem A: fibonacci
题目大意 给你一个序列\(a_1, a_2, ..., a_n\). 我们令函数\(f(n)\)表示斐波那契数列第\(n\)项的值. 总共\(m\)个操作, 分为以下两种: 将\(x \in [L, ...
- Maven出现错误No plugin found for prefix 'jetty' in the current project and in the plugin groups的问题解决
只需在maven的setting.xml文件上加入如下节点: <pluginGroups> <pluginGroup>org.mortbay.jetty</pluginG ...
- Shell脚本部分语法
Shell中的变量 Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看那系统变量 系统变量:$HOME.$PWD.$SHELL.$USER等等 显示当前sh ...
- CentOS-7 在windows server 2012下的虚拟机安装教程
CentOS-7 在windows server 2012下的虚拟机安装教程 一.下载 CentOS-7-x86_64-DVD-1611.iso https://mirrors.aliyun.com/ ...
- 【React Native开发】React Native移植原生Android项目(4)
),React Native技术交流4群(458982758),请不要反复加群!欢迎各位大牛,React Native技术爱好者加入交流!同一时候博客左側欢迎微信扫描关注订阅号,移动技术干货,精彩文章 ...
- HBase1.0以上版本号的API改变
HBase1.0以上版本号已经废弃了 HTableInterface,HTable,HBaseAdmin等API的使用.新增了一些API来实现之前的功能: Connectioninterface: C ...
- Effective C++ 35,36,37
35.使公有继承体现 "是一个" 的含义. 共同拥有继承意味着 "是一个".如 class B:public A. 说明类型B的每个对象都是一个类型A的对象, ...
- Leetcode Array 4 Median of Two Sorted Arrays
做leetcode题目的第二天,我是按照分类来做的,做的第一类是Array类,碰见的第二道题目,也就是今天做的这个,题目难度为hard.题目不难理解,但是要求到了时间复杂度,就需要好好考虑使用一下算法 ...
- RF --系统关键字开发
需求: 接收一个目录路径,自动遍历目录下以及子目录下的所有批处理(.bat) 文件并执行. 首先在..\Python27\Lib\site-packages 目录下创建 CustomLibrary 目 ...