在线等答:delphi7/Internet/Socke实现对TCP/IP数据发送“编程”

recv(comm_socket,recv_buff, sizeof(recv_buff), 0); /receiveclient's command/

TReceiveThread = class(TThread)

在线socket 在线Socket版在线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 list =new ArrayList();

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 就会又出现一个问题。 崩溃