在线socket 在线Socket版
在线等答:delphi7/Internet/Socke实现对TCP/IP数据发送“编程”
recv(comm_socket,recv_buff, sizeof(recv_buff), 0); /receiveclient's command/TReceiveThread = class(TThread)
在线socket 在线Socket版
在线socket 在线Socket版
private
FMsg: string;
protected
procedure Execute; override;
varnew SocketThread(socket).start();
FThread: TReceiveThread;
procedure TReceiveThread.Execute;
while not Terminated do
FMsg := Form1.IdTCP1.ReadLn;
Sleep(100);
procedure TForm1.FormCreate(Sender: TObject);
FThread := TReceiveThread.Create(False);
IdTCP1.Host := Edit1.Text;
IdTCP1.Port := 10001;
if not IdTCP1.Connected then
IdTCP1.Connect;
2. tcpserver向tcpclient发送数据
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
i : Integer;
try
with IdTCP1.Threads.LockList do
for I := 0 to Count - 1 do
AThread := Items[I];
if AThread.Connection.Socket.Binding.PeerIP = 'hostname ' then
AThread.Connection.WriteLn(s);
finally
IdTCP1.Threads.UnlockList;
想用JAVA做一个,请问怎么利用TCP和线程,实现多个客户端同时在线,能与进行交互?
端口 做个无限循环 接到一个连接就创建一个通道线程,并将通道线程存储到一个list中
import ja.io.BufferedReader;
import ja.io.InputStreamReader;
import ja.io.PrintWriter;
import ja.Socket;
import ja.text.SimpleDateFormat;
import ja.util.ArrayList;
import ja.util.Date;
import ja.util.List;
/
4.用socket通讯写出多个客户端和一个端的通讯,
要求客户发送数据后能够回显相同的数据(回显功能)(实用TCP方式)。
/
public class Test4 {
// 主入口
public static void main(String[] args) throws IOException {
scoket();
}// 开启的tcp8888端口
public static void scoket() throws IOException {
Socket server = new Socket(8888);
while (true) {
// 未连通前线程阻塞,连通后开启一个socket通道线程后继续8888端口
Socket socket = server.accept();
System.out.println(socket.getInetAddress().getHostAddress()
class SocketThread extends Thread {
// 所有通道写入流的
private static List
private BufferedReader bufferedReader;
private PrintWriter printWriter;
public SocketThread(Socket socket) throws IOException {
this.bufferedReader = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
this.printWriter = new PrintWriter(socket.getOutputStream());
list.add(printWriter);
}@Override
public void run() {
String string = null;
while (true) {
try {
// 在通道中读到的信息回显给端
string = bufferedReader.readLine();
System.out.println("端信息:" + string);
for(PrintWriter printWriter:list ){
printWriter.write("回显:" + string + "
");
printWriter.flush();
}} catch (IOException e) {
}}端代码 可以用在局域网中用多台来连接测试
import ja.io.BufferedReader;
import ja.io.InputStreamReader;
import ja.io.PrintWriter;
import ja.Socket;
public class Test4 {
public static Object obj = new Object();
// 端的主入口
public static void main(String[] args) throws IOException {
socket();
}// 与连通地址本机(127.0.0.1),局域网中其他机器是(在局域网中的ip地址) 端口都是8888
public static void socket() throws IOException {
Socket socket = new Socket("127.0.0.1", 8888);
if (socket.isConnected()) {
// 如果连接成功了就开启写和读的进程
new writer(socket).start();
new read(socket).startimport ja.Socket;();
} else {
System.out.println("未开启");
}// 写入到通道的线程
class writer extends Thread {
@SuppressWarnings("unused")
private PrintWriter printWriter;
private Scanner scanner = new Scanner(System.in);
private String str = null;
public writer(Socket socket) throws IOException {
this.socket = socket;
this.printWriter = new PrintWriter(socket.getOutputStream());
}@Override
public void run() {
scanner.useDelimiter("
");
while (true) {
System.out.print("请输入信息:");
// 产生扫描器的线程阻塞
str = scanner.next();
System.out.println("我说:"+str);
printWriter.write(str + "
");
printWriter.flush();
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// 从通道中读取的线程
class read extends Thread {
private BufferedReader bufferedReader;
private String str = null;
this.socket = socket;
this.bufferedReader = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
}@Override
public void run() {
while (true) {
try {
str = bufferedReae.printStackTrace();der.readLine();
System.out.println(str);
} catch (IOException e) {
}try {
Thread.sleep(200);
} catch (InterruptedException e) {
C语言 socket编程 客户端只send一次 但是会循环执行这条命令 在线等
Socket连接不在通讯状态的时候监测是否连接良好就没有什么意义了,也就是说在传输数据的时可能连接会异常断开,这时候测试连接的线程肯定不可能在运行中(监测线程的优先级不可能比传输数据线程的优先级高),除非把优先级设得比较高,如果这样的话就太浪费资源了。改成
int ret = recv(comm_socket,recv_buff, sizeof(recv_buff)}// 一个端口中多个端通道线程, 0); /receiveclient's command/
if ret == -1 || ret == 0
break
== -1 表示出错, =0 表示 socket 已经关闭。
利用socket可以从网络上获得视频流,请问如何用ja写的代码程序来播放?
}}jacv基于ffmpeg和opencv等开源音视频、图像处理库,可以支持各种协议的推流,拉流,实时图像处理,jacv可以解决你的问题,具体请参考jacv教程专栏:
AThread : TIdPeerThread;不需要自己写程序 用Video LAN播放器试试 开源的 功能很强大 支持TCP UDP RTP等多种协议的流媒体播放
a的应该是不行...
我用的ja程序的播放流媒体文件没有成功过.也几乎没有播放方式.没有播放器.因为ja堆曵容量(就是程序运行内存)比较小.而播放视频占用硬件资源比较大..所以不行...
但是智能机确实可以..因为智能机拥有较大内存和较好的软硬件基础..并且网络上也有专门 给智能机开发的看视频软件.甚至还有呢的播放器..
传到html页面,通过h5,或者页面的播放器插件就可以播放了
JMF 支持的格式非常有限的!
JAVA也许可以获取视频流,但要解码、播放,还是挺麻烦,可以使用第3方的支持,如ffmpeg等
C# socket循环接收网页信息的时候出现“远程主机关闭了一个现有的连接。”
思路是对的,和传统的不end;了多少用线程哪
Thread t1;
t1 = new Thread(new ThreadStart(获取网页信息方法));
t1.Start();
{}如果不需要那么频繁的执行的话 可以在获取网页信息方法中Sleep一下
{Thread.Sleep(2000);//休眠2秒后再执行 单位为毫米
}
C# socket 通信系统,socket断线重连问题
import ja.io.IOException;需要在Socket连接不在使用中时仍然保持连接,比较折衷的办法+ "连接进入");是:
其一,建立一个低优先级的监视线程,用来保持非通讯状态的连接完好。
其二,用try...catch...来维持通讯过程中的连接良好(一旦通讯异常立即重新连接)。
面试笔记-Socket MQTT Websocket
1.Socket是对TCP/IP协议的封装,Socket本身并不是1. tcpclient从tcpserver接收数据:协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
2.MQTT协议是应用层协议不依赖长连接,适合弱网络。通过topic缓存信息。符合物联网设备的使用场景。因为通过topic缓存信息,因此可以实现通过topic与多个端的一对多连接,而不是设备与设备的多对多连接,节省了能耗及带宽。
MQTT的心跳,及非信息的报文,较Websocket更少,更节省带宽及能耗。更适用于物理网的多种网络协议。
3.WebSocket和Http一样在应用层,提供使用一个TCP连接进行双向通讯的机制,包括网络协议和API,以取代网页和采用HTTP轮询进行双向通讯的机制。 本质上来说,WebSocket是不限于HTTP协议的,但是由于现存大量的HTTP基础设施,,过滤,身份认证等等,WebSocket借用HTTP和HTTPS的端口。由于使用HTTP的端口,因此TCP连接建立后的握手消息是基于HTTP的,由判断这是一个HTTP协议,还是WebSocket协议。 WebSocket连接除了建立和关闭时的握手,数据传输和HTTP没丁点关系了。
Socket 连接,至少需要一对套接字,分为 clientSocket,serverSocket 连接分为3个步骤:
(1) :并不定位具体客户端的套接字,而是时刻处于状态;
(2) 客户端请求:客户端的套接字要描述它要连接的的套接字,提供地址和端口号,然后向套接字提出连接请求;
(3) 连接确认:当套接字收到客户端套接字发来的请求后,就响应客户端套接字的请求,并建立一个新的线程,把端的套接字的描述发给客户端。一旦客户端确认了此描述,就正式建立连接。而套接字继续处于状态,继续接收其他客户端套接字的连接请求.
Socket为长连接:通常情况下Socket 连接就是 TCP 连接,因此 Socket 连接一旦建立,通讯双方开始互发数据内容,直到双方断开连接。在实际应用中,由于网络过多,在传输过程中,会被断开连接,因此要通过轮询高速网络,该处于活跃状态。
若双方是 Socket 连接,可以由直接向客户端发送数据。
若双方是 HTTP 连接,则需要等客户端发送请求后,才能将数据回传给客户端。
因此,客户端定时向端发送请求,不仅可以保持在线,同时也询问是否有新数据,如果有就将数据传给客户端。
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是轻量级基于的发布/的消息传输协议,设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境。
例如:
①网络代价昂贵,带宽低、不可靠。
②在嵌入设备中运行,处理器和内存资源有限。
该协议的特点有:
①使用发布/消息模式,提供一对多的消息发布,解除应用程序耦合。 ②对负载内容屏蔽的消息传输。
③使用 TCP/IP 提供网络连接。
④有三种消息发布服务质量:
⑤"至多一次",消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
⑦"只有一次",确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
⑧小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。
⑨使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。
实现MQTT协议需要客户端和端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、(Broker)()、者(Subscribe)。其中,消息的发布者和者都是客户端,消息是,消息发布者可以同时是者。
有三种消息发布服务质量:
“至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。qos=0
“至少一次”,确保消息到达,但消息重复可能会发生。qos=1
“只有一次”,确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。qos=2
Topic,可以理解为消息的类型,者(Subscribe)后,就会收到该主题的消息内容(payload);
payload,可以理解为消息的内容,是指者具体要使用的内容。
在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成。MQTT数据包结构如下:
固定头(Fixed header)。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。
可变头(Variable header)。存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。
消息体(Payload)。存在于部分MQTT数据包中,表示客户端收到的具体内容。
WebSocket则提供使用一个TCP连接进行双向通讯的机制,包括网络协议和API,以取代网页和采用HTTP轮询进行双向通讯的机制。 本质上来说,WebSocket是不限于HTTP协议的,但是由于现存大量的HTTP基础设施,,过滤,身份认证等等,WebSocket借用HTTP和HTTPS的端口。由于使用HTTP的端口,因此TCP连接建立后的握手消息是基于HTTP的,由判断这是一个HTTP协议,还是WebSocket协议。 WebSocket连接除了建立和关闭时的握手,数据传输和HTTP没丁点关系了。 由此可知两者的应用场景不一样: MQTT是为了物联网场景设计的基于TCP的Pub/beginSub协议,有许多为物联网优化的特性,比如适应不同网络的QoS、层级主题、遗言等等。 WebSocket是为了HTML5应用方便与双向通讯而设计的协议,HTTP握手然后转TCP协议,用于取代之前的 Push、Comet、长轮询等老旧实现。 两者之所有有交集,是因为一个应用场景:如何通过HTML5应用来作为MQTT的客户端,以便接受设备消息或者向设备发送信息,那么MQTT over WebSocket自然成了最合理的途径了。
ja socket 客户端能 多次 随时 向客户端发送会话吗?要怎么实现,能举个例子吗 在线等,谢谢再次谢谢
可以做的到,但这个是有前提的,就好像QQ一样,必须对方在线,他才能收到你的会话。
比如说多次,你可以采用循环输入,等到满足一个条件时,退出!
比如说发送方代码如下:
import ja.DatagramPacket;
import ja.DatagramSocket;
import ja.InetAddress;
import ja.UnknownHostException;
class practise1if Form1.IdTCP1.Conneimport ja.SocketException;cted then2{
public static void main(String[] args) throws SocketException, UnknownHostException, IOException{
DatagramSocket ds=new DatagramSocket(3000);
DatagramPacket dp=null;
String str="";
do{
System.out.println("请输入:");
Scanner input=new Scanner(System.in);
str=input.next();
dp=new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("localhost"),8000);
}while(strpareTo("exit")!=0);
ds.close();
这样你就可以多次发送会话,当发送方输入“exit”时,程序就会退出。
接收方也是同样道理:当接收到“exit”时,程序退出。
一点灼见,希望对你有用!
怎样保存巨多个客户端的SOCKET连接?
ds.send(dp);既然你要频繁的设计socket的查找,用哈希表效率会高一些
竟然你要把这些数据保存在内存中,用数据库肯定不符合了
用数组吧,删除不方便
private Socket socket;使用链表也不错
你这种思路只是一个线程,同时在线人数多的话响应会很慢的。必须要用到多线程,可以考虑使用线程池(参考windows核心编程)
在线烧录方式可以用希尔特6100吗
import ja.util.Scanner;可以,根据查询哔哩哔哩网显示:
⑥"至少一次",确保消息到达,但消息重复可能会发生。1、烧录器组成是数据线,Socket、驱动器、电源线,电源线接插线板,USB线接PCu端口即可。
2、打开Socket,可以用镊子夹取flash,平稳放置在socket中,在将Socket卡扣按下扣好,此处请注意放置位置对齐平整,不可放反。
3、上电后按下烧录器后面的电源开关上电,指示面板会有相应指示。
4、烧录完成后按下电源开关,将电源关掉,用镊子取出Flash即可。
ja与c# socket通信。为什么服务端只能收到一个socket,第二个就收不到?
private void 获取网页信息方法()服务端的Socket认为 你的C#的客户端是同一个Socket, 所以线程和子线程都起了一个。
你把C#的工程copy一个 三个工程一起运行测试看看。而且你这个子线程写的有问题,List里的socket不该删掉。 不便于你管理socket。 你如果断掉Socket 就会又出现一个问题。 崩溃
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。