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.获取输入流(对象流)即用户在客户端所发过来的信息. ...
随机推荐
- css布局理解
1.盒模型(页面的所有元素都看成一个类似于礼品盒的盒子:包括块级元素和行内元素(也叫内联元素)):http://www.cnblogs.com/cchyao/archive/2010/07/12/17 ...
- Apache Http Server和Tomcat 之区别
转自:Apache Http Server和Tomcat 之区别 Apache官方网站:http://www.apache.org/Tomcat官方网站:http://tomcat.apache.or ...
- windows网络编程(1)同步套接字
1.socket是应用程序与网络驱动程序的桥梁,在应用程序中创建socket,将数据交付给socket即完成数据传输,剩下的任务由socket和网络驱动程序完成: 2.套接字类型:SOCK_STREA ...
- Java Object 对象拷贝答疑
Java Object 对象拷贝答疑 @author ixenos 摘要:在对象的clone过程需要注意的几点.关于关键字this.super 关于clone[对象拷贝] 在实际编程过程,有时候我们会 ...
- PHP7新功能及语法变化总结
1.标量类型声明有两种模式: 强制 (默认) 和 严格模式. 现在可以使用下列类型参数(无论用强制模式还是严格模式): 字符串(string), 整数 (int), 浮点数 (float), 以及布尔 ...
- 一个文字无缝滚动的jQuery插件
直接上代码吧 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www. ...
- Android Lights
Android Lights 很多Android手机上都配有LED灯,手机在充电.新来短信等时候都会有相应的指示灯提示. Android系统之中,一共定义了8个逻辑灯,包含:背光,键盘灯,按键灯,充电 ...
- C++常用库函数
C++常用库函数 转自:http://blog.csdn.net/sai19841003/article/details/7957115 1.常用数学函数 头文件 #include <math ...
- 修改TFS与本地源代码映射路径
使用源代码管理资源管理器修改工作区 在“文件”菜单上单击“源代码管理”,再单击“工作区”. 在“管理工作区”对话框的“名称”列下,突出显示要修改的工作区,然后单击“编辑”. 在“编辑工作区”对话框中: ...
- iOS学习笔记(02) - 关键字 __kindof
1.__kindof:表示当前类或它的子类. 2.__kindof书写格式:放在类型前面,表示修饰这个类型. 3.__kindof优点:在调用的时候,很清楚的知道返回类型. 直接举一个例子来形容这个问 ...