Java学习笔记之基于TCP协议的socket
可以一直输入,而不是一问一答:
开两个线程,一个负责收,一个负责发。
1.先运行:
package com.zr.javase0825; 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;
import java.util.Scanner; public class User1 implements Runnable { //String pdd="read";
Socket sock;
//Socket sockC;
public static void main(String[] args) {
User1 u1=new User1(); ServerSocket ssock;
try {
ssock = new ServerSocket(1234);
u1.sock=ssock.accept(); // u1.sockC=new Socket("127.0.0.1",5678); Thread t1=new Thread(u1,"read");
Thread t2=new Thread(u1,"write");
t1.start();
t2.start(); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public void read(Socket sock){
try {
BufferedReader buff=new BufferedReader(new InputStreamReader(sock.getInputStream()));
System.out.println("user2:"+buff.readLine()); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public void write(Socket sockC){
try {
BufferedWriter buff=new BufferedWriter(new OutputStreamWriter(sockC.getOutputStream()));
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
String str= bf.readLine();
buff.write(str+"\n");
buff.flush(); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} @Override
public void run() { if(Thread.currentThread().getName().equals("read"))
while(true)
read(sock);
else
while(true)
write(sock); } }
后运行:
package com.zr.javase0825; 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.util.Scanner; public class User2 implements Runnable { //String pdd="read";
Socket sock;
//Socket sockC;
public static void main(String[] args) {
User2 u1=new User2(); //ServerSocket ssock;
try {
//ssock = new ServerSocket(5678);
//u1.sock=ssock.accept(); u1.sock=new Socket("127.0.0.1",1234); Thread t1=new Thread(u1,"read");
Thread t2=new Thread(u1,"write");
t1.start();
t2.start(); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public void read(Socket sock){
try {
BufferedReader buff=new BufferedReader(new InputStreamReader(sock.getInputStream()));
System.out.println("user2:"+buff.readLine()); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public void write(Socket sockC){
try {
BufferedWriter buff=new BufferedWriter(new OutputStreamWriter(sockC.getOutputStream()));
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
String str= bf.readLine();
buff.write(str+"\n");
buff.flush(); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} @Override
public void run() {
Scanner in=new Scanner(System.in);
if(Thread.currentThread().getName().equals("read"))
while(true)
read(sock);
else
while(true)
write(sock); } }
Java学习笔记之基于TCP协议的socket的更多相关文章
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
- 基于TCP 协议的socket 简单通信
DNS 服务器:域名解析 socket 套接字 : socket 是处于应用层与传输层之间的抽象层,也是一组操作起来非常简单的接口(接受数据),此接口接受数据之后,交由操作系统 为什么存在 soc ...
- Java:基于TCP协议网络socket编程(实现C/S通信)
目录 一.前言:TCP原理简介 二.Socket编程通信 三.TCP服务器端(具体代码) 四.TCP客户端(具体代码) 五.通信效果演示 六."创意"机器人:价值一个亿的AI核心代 ...
- 基于TCP协议的socket套接字编程
目录 一.什么是Scoket 二.套接字发展史及分类 2.1 基于文件类型的套接字家族 2.2 基于网络类型的套接字家族 三.套接字工作流程 3.1 服务端套接字函数 3.2 客户端套接字函数 3.3 ...
- 基于TCP协议的socket编程
什么是socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面, ...
- 网络编程: 基于TCP协议的socket, 实现一对一, 一对多通信
TCP协议 面向连接 可靠的 面向字节流形式的 tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 TCP协议编码流程: 服务器端: 客户端 实例化对 ...
- 闲来无事,写个基于TCP协议的Socket通讯Demo
.Net Socket通讯可以使用Socket类,也可以使用 TcpClient. TcpListener 和 UdpClient类.我这里使用的是Socket类,Tcp协议. 程序很简单,一个命令行 ...
- Java网络编程三--基于TCP协议的网络编程
ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待状体 Socket accept():如果接收到客户端的连接请求,该方法返回一个与客户端对应Socket ...
- Java修炼——基于TCP协议的Socket编程_双向通信_实现模拟用户登录
首先我们需要客户端和服务器端. 服务器端需要:1.创建ServerSocket对象.2.监听客户端的请求数据.3.获取输入流(对象流)即用户在客户端所发过来的信息. ...
随机推荐
- scrapy 知乎的模拟登陆及抓取用户数据
最近看了python的scrapy 框架并用其抓取了部分知乎用户数据,代码主要是集中在知乎登陆和抓取时候的逻辑处理上. 1. 首先进入知乎登陆页面zhihu.com/#sigin上, 用xpath提取 ...
- jQuery复习:第五章
一.表单应用 1.表单验证: 首先创建一个表单: <form method="post" action=""> <div class=&quo ...
- jQuery第六章
jQuery与Ajax应用 一.Ajax的优势和不足 1.Ajax的优势: (1)不需要插件支持:不需要任何浏览器插件就可以被绝大多数浏览器支持 (2)优秀的用户体验:能在不刷新整个页面的前提下更新数 ...
- mysql去重的最方便的两种方法
参考资料:http://blog.csdn.net/guocuifang655/article/details/3993612 方法一: 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然m ...
- 【LeetCode】459. Repeated Substring Pattern
Given a non-empty string check if it can be constructed by taking a substring of it and appending mu ...
- hdu_5818_Joint Stacks(线段树模拟)
题目链接:hdu_5818_Joint Stacks 题意: 给你两个栈,多了个合并操作,然后让你模拟 题解: 很容易想到O(1)的单个栈操作,O(n)的合并操作,这样肯定超时,所以我们要将时间复杂度 ...
- mysql启动
mysql启动遇到的问题
- Zookeeper 启动错误
启动后日志如下 : 2016-09-14 05:51:19,449 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeade ...
- The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files
JDK版本的问题. 解决方法: 原来jdk1.8不向下兼容,用回1.6的就可以了. 下图有三个jdk,前两个自己装的,第三个MyEclipse自带的.
- sort 排序详解
http://www.qdfuns.com/notes/17398/c56832f62b3271e79671f77dcdd2c058.html. http://www.qdfuns.com/notes ...