JAVA Socket编程(二)之TCP通信
2024-10-25 22:05:26 原文
基于TCP(面向连接)的socket编程,分为客户端和服务器端。
客户端的流程如下:
(1)创建套接字(socket)
(2)向服务器发出连接请求(connect)
(3)和服务器端进行通信(send/recv)
(4)关闭套接字
服务器端的流程如下:
(1)创建套接字(socket)
(2)将套接字绑定到一个本地地址和端口上(bind)
(3)将套接字设为监听模式,准备接收客户端请求(listen)
(4)等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)
(5)用返回的套接字和客户端进行通信(send/recv)
(6)返回,等待另一个客户请求。
(7)关闭套接字。
本文介绍一个多线程的TCP编程
1:创建服务器端并实现线程类 代码如下
package tcp; import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket; public class Server implements Runnable {//实现一个线程类
private Socket soc;
public Server(Socket soc) {
super();
this.soc = soc;
}
private BufferedReader in=null;
private BufferedReader input=null;//获得各种流对象
PrintWriter out=null;
@Override
public void run() {
// TODO Auto-generated method stub
try {
in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
input=new BufferedReader(new InputStreamReader(System.in));
out=new PrintWriter(soc.getOutputStream(),true);//每次都清空输出流
String message;
while((message=in.readLine())!=null){
System.out.println(message);//读取到的客户端数据
System.out.println("输入回执的数据:");
out.println(input.readLine());//回执数据
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
in.close();
input.close();//关闭各种流对象
out.close();
} catch (Exception e2) {
e2.printStackTrace();
// TODO: handle exception
}
}
} }
2:创建多线程的启动类 代码如下
package tcp; import java.net.ServerSocket;
import java.net.Socket; public class ServerStart { public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket server=new ServerSocket(9000);//这只9000为服务器段
Socket soc=new Socket();
while (true) {
soc=server.accept();//监听端口的链接
new Thread(new Server(soc)).start();//只要有链接就启动一个线程
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} }
3:创建客户端的类 代码如下
package tcp; import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket; public class Client {
private static Socket soc=null;
private static BufferedReader in=null;
private static BufferedReader input=null;
private static PrintWriter out=null; public static void main(String[] args) {
// TODO Auto-generated method stub
try {
soc=new Socket("127.0.0.1",9000);
while(true){
in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
input=new BufferedReader(new InputStreamReader(System.in));
out=new PrintWriter(soc.getOutputStream(),true);
System.out.println("输入发送的数据:");
String op=input.readLine();
out.println(op);
if(op.equals("aa")){
break;
}
System.out.println(in.readLine());
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
in.close();
input.close();
out.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
} }
udp查看:http://www.cnblogs.com/GH0522/p/8119289.html
JAVA Socket编程(二)之TCP通信的更多相关文章
- TCP/UDP套接字 java socket编程实例
网络协议七层结构: 什么是Socket? socket(套接字)是两个程序之间通过双向信道进行数据交换的端,可以理解为接口.使用socket编程也称为网络编程,socket只是接口并不是网络通信协议. ...
- Java Socket编程题库
一. 填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...
- Java——Socket编程(一)
1. 网络基础知识 两台机器之间需要进行通信,需要满足的条件: 每个机器有一个唯一的标识符(IP地址): 他们之间进行通信需要用同一种语言(协议): 每台主机上面有多个应用程序,如QQ,微博,迅雷等, ...
- 如何为可扩展系统进行Java Socket编程
从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket ...
- Java Socket编程基础篇
原文地址:Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Sock ...
- Java Socket编程(转)
Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首 ...
- Java基础:三步学会Java Socket编程
Java基础:三步学会Java Socket编程 http://tech.163.com 2006-04-10 09:17:18 来源: java-cn 网友评论11 条 论坛 第一步 ...
- 转:Java Socket编程
对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首先ServerSocket将 ...
- 用java网络编程中的TCP方式上传文本文件及出现的小问题
自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文 ...
- Java Socket编程详细解说
Java Socket编程 JavaSocketServerSocket乱码超时 Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是So ...
随机推荐
- HTML Entity 字符实体
目录 1. HTML Entity 2. 字符与Entity Name的互相转换 3. 字符与Entity Number的互相转换 1. HTML Entity 1.1 介绍 在编写HTML页面时,需 ...
- LINQ学习系列-----2.2 迭代器
在学习本篇迭代器之前,强烈建议可以先学习一位具有工匠精神博主的文章,链接如下: 农码一生---先说IEnumerable,我们每天用的foreach你真的懂它吗? 本篇文章,是在该博主博文的基础上再次 ...
- UTF-8和UTF-8无BOM,一个会导致文件中中文变量无法匹配的bug
昨晚用dom4j中的selectSingleNode解析xml,匹配节点. 发现匹配不到,但是确实存在该节点 将regex改为regex1后则可以匹配,也就是说文件中的"阿里旺旺" ...
- 内网神器-Bettercap
安装bettercap 1 2 root@sch01ar:~# apt-get update root@sch01ar:~# apt-get install bettercap 安装完成后查看一下帮 ...
- Handlebars 和 angularjs 之间的区别
handlebarsjs算不上框架,只是一种js模板引擎,是模板库,模板库的主要作用是:你想要生成某一大片有一定规律的界面,比如商品详情,不同商品之间差的只是名称,价格,图片,介绍这些,但是结构一样的 ...
- JAVA基础-JDBC二(常用的开源工具)
一.连接池 在实际的开发应用中,我们常常会对数据库进行大量的高并发的访问,而最原始的连接和操作方式并不能满足这种大量的访问,程序员为了追求更方便.更快捷.更科学安全的开发.第三方的工具类和Dao层的框 ...
- SEO是件贼有意思的事情 golang入坑系列
这两天迷上了SEO.真心看不起百度的竞价排名,但作为一个商业网站,赚钱是一件无可厚非的事情.只做活雷锋,没有大金主是做不长的.做完功课后,发现百度和google的SEO策略又不相同,几乎是无法通用.百 ...
- 51Nod--1085背包问题
1085 背包问题 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为整 ...
- NYOJ-2359: 巴什博弈?
2359: 巴什博弈? 时间限制: 1 Sec 内存限制: 30 MB 提交: 263 解决: 55 [提交][状态][讨论版] 题目描述 有n个石子,有两人轮流从中取石子,最少a个最多b个,谁没 ...
- HDU 2795 Billboard 线段树,区间最大值,单点更新
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...