SOCKET接收数据的同事并且将接收的数据转发到自己的服务端,以供别的客户端请求读取

1、假设我有一个socket客户端A,接收其他服务器的信息,解析完成之后,存到数据库,
2、同时要启动一个自己的服务端S,可以让其他的客户端假设B进行请求,输入账号密码,通过之后拿到A实时接收到的数据

2个回答

已经自己实现,生产者消费者模式

如果你想要的逻辑是这样的话,我给出我自己的建议:
1、客户端A接收到服务器的数据之后,保存到数据库;
2、(这里不知道你是否是必须启动一个本地服务器) 其实第二步可以选择使用http接口的方式,不用socket,因为是用户B主动请求数据。并不是客户端A获取到数据之后,进行实时转发给用户B!
3、如果是实时转发:建议本地服务端先启动好。用户B事先是连接上的,然后客户端A接收数据的同时,可以直接选择广播的方式进行将接收到的数据发送给用户B

(马上下班了。就不写代码上了。就写点思路建议了,看看就好)

weixin_42960721
徐良海哎哟是你呀 用http就保证不了实时,但是用广播不知道怎么写
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android 客户端socket接收数据时只能接收到1448个字节

byte[] buffer = new byte[1024 * 101]; while ((length = is.read(buffer)) != -1) { byte[] dataInstream = new byte[length]; System.arraycopy(buffer, 0, dataInstream, 0, length); } ```我在使用socket接收数据的时候,new一个缓冲区然后从输入流中读取数据到缓冲区可读到的数据只有1448个字节而实际服务端发送的字节数据流远远大于1448,困扰了几天了,有人能帮我解决这个问题吗 ```

Java做socket实时接收数据存入数据库不及时?

* 应公司业务做了一个基于socket的实时接收数据的功能,就是我java后端写了一个服务端是基于UDP协议的,实时接收客服端发来的数据,对数据进行处理存入数据库。 * 目前的客户端发来的数据比较快,一秒能有10个包发过来,每个包的数据也不大,挺小的,但就是我在处理这些数据的时候写的逻辑运算比较多,造成了目前存入数据库时不能达到所谓的实时更新的效果 * 我说一下这个数据必须要在页面实时更新展示的 * 补充一下:是开启多个客户端同时向服务端发送数据的,就比如目前有三个客户端对服务端同时发送数据(同一个端口),就会出现数据存入数据库不及时,但数据是已经接收到了(我在控制台打印看到了,只是没有及时存到数据库) * 如果只是一个客户端向数据库发送数据就可以达到理想化的实时存入数据库然后在页面实时展现数据,多个就不行了 * 想问下各位大佬,是程序运行的太慢了,还是什么原因呢?我也做了开启多线程执行程序了啊 ``` public String startDs() { DatagramSocket socket = null; try { socket = new DatagramSocket(8800); } catch (SocketException e) { e.printStackTrace(); } //记录客户端的数量 int count = 0; while (true) { data = new byte[16];// 创建字节数组,指定接收的数据包的大小 packet = new DatagramPacket(data, data.length); try { socket.receive(packet); } catch (IOException e) { e.printStackTrace(); } // 此方法在接收到数据报之前会一直阻塞 Thread thread = new Thread(new UDPThread(socket, packet)); thread.start(); } } ```

c++socket客户端数据接收问题

本人刚接触这个东西,水平较低,在测试上位机客户端是否可以接受数据时,出现些问题,下位机发送的数据是ff,上位机接收的情况如图,会出现乱码,还有就是数据显示的很慢,最重要的是还需要不断抽拔与WiFi模块RX接口相连的线才能有数据显示,不知道是什么原因,程序是在网上找的socket客户端的程序,请大神们帮看一下,这个问题折磨我很久了,万分感谢。![图片说明](https://img-ask.csdn.net/upload/201608/25/1472136704_602387.png)

C# socket接收单片机数据问题

单片机通过wifi将采集到传感器的数据传至上位机,单片机是每一秒发送一组数据,如“0xaa,0x55,‘采集到的数据1’,‘采集到的数据2’” 问:怎样才能接收数据并判断第一个是“0xaa“并且第二位是”0x55“时候将”采集到的数据1“和”采集到的数据2“拿出来并整合合,下一秒也是这样循环下去,我现在只能做到接收数据。 private byte[] m_receiveBuffer = new byte[1024]; sock.BeginReceive(m_receiveBuffer, 0, m_receiveBuffer.Length, 0, new AsyncCallback(ReceiveCallBack), null); private void ReceiveCallBack(IAsyncResult ar) { try { int REnd = sock.EndReceive(ar); string strReceiveData = m_receiveBuffer[0].ToString("X2"); this.HandleMessage(strReceiveData); sock.BeginReceive(m_receiveBuffer, 0, m_receiveBuffer.Length, 0, new AsyncCallback(ReceiveCallBack), null); } catch (Exception ex) { throw new Exception(ex.Message); } } private void HandleMessage(string message) { message = message.Replace("\0", ""); if (!string.IsNullOrEmpty(message)) { label6.Text = message; } }

C++socket数据接收处理问题

1.能够点了按钮之后能够一直接收发送过来的单行数据 2.能把接收的数据处理好了之后存到另外定义的数组或list中去 3.那个线程应该如何定义程序才能执行   SOCKET sHost;   WSADATA wsd;   SOCKET sServer;   SOCKET sClient;   SOCKADDR_IN addrServ;   void CMyDlg::OnRev()   {   #define BUF_SZIE 64   #pragma comment(lib, "ws2_32.lib")   char buf[BUF_SZIE];   int retVal;   if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)   {   printf("WSAStartup failed!\n");   }   sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);   addrServ.sin_family = AF_INET;   addrServ.sin_port = htons(3000);   addrServ.sin_addr.s_addr = INADDR_ANY;   retVal = bind(sServer, (LPSOCKADDR)&addrServ, sizeof(SOCKADDR_IN));   retVal = listen(sServer, 10);   sockaddr_in addrClient;   int addrClientlen = sizeof(addrClient);   sClient = accept(sServer,(sockaddr FAR*)&addrClient, &addrClientlen); ​   ZeroMemory(buf, BUF_SZIE);      while(true)   {   retVal = recv(sClient, buf, BUF_SZIE, 0);   if (SOCKET_ERROR == retVal)   {   printf("send failed!\n");   }   else   {   ......   }   }      closesocket(sClient);   WSACleanup();   } 求大神指点一二 - List item

往socket发送大量数据,接收方无法读取到完整数据

大家有没有遇到一种情况,客户端往服务器的socket发送了一个很大的数据(3万+byte),在服务器那边read socket的时候没有读到所有的数据,服务器用while去读但是都无法读到客户端发过来的所有数据,读取socket fd的代码如图 ![图片说明](https://img-ask.csdn.net/upload/201504/26/1430034961_507939.png)

JAVA使用socket发送数据,服务端接收到的数据总是不一致,不明白哪里错了,请大神指点!

客户端: package test; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.security.PublicKey; public class SocketClient { public static byte[] varout = "987654321hijklmn".getBytes() ; public static byte[] varout1 = {'1','2','3','4','5','6','7','8','9'} ; public static byte[] varout2 = {'a','b','c','d','e','f','g'} ; public static void main(String[] args) { Socket socket = null; try { socket = new Socket("127.0.0.1", 8000); socket.setSoTimeout(100000); OutputStream out1 = socket.getOutputStream(); out1.write(varout); out1.write(varout1); out1.write(varout2); out1.flush(); out1.close(); } catch (Exception e){ e.printStackTrace(); } finally { try{ socket.close(); } catch (Exception e){ e.printStackTrace(); } } } } 服务端: package test; import java.io.InputStream; import java.io.InputStreamReader; import java.net.Socket; import java.net.ServerSocket; public class SocketServer { public static void main(String[] args) { try { ServerSocket serverSocket2 = new ServerSocket(8000); while(true){ Socket s2 = serverSocket2.accept(); InputStream in = s2.getInputStream(); s2.setSoTimeout(10000); //使用InputStream.read(var1)接收数据 byte[] var1 = new byte[10000]; while(in.read(var1) !=-1){ System.out.println(in.read(var1)); System.out.println(new String(var1)); } System.out.println("结束:"+new String(var1)); } } catch (Exception e){ e.printStackTrace(); } } } 服务端接收的结果: ![图片说明](https://img-ask.csdn.net/upload/202002/21/1582283115_195272.jpg)

Socket同时读写问题,两边都可以发送接收数据

有个协议通过socket通讯,两边都可以发送接收数据。完整的指令是一个请求对应一个应答。 正常来说是需要有个读线程用来监听对方主动发过来的数据,当接收到数据后我就返回个响应信息给对方。我这边主动发送指令后也要进行读取对方响应的消息。但我该如何设计请求与响应这一对信息呢?Socket.Receive又是阻塞的,我希望最好是一个线程接收对方的指令,一个我这边主动发的指令,互相不干扰。

求助,C# winform实现socket接收客户端数据,总是丢数据。

程序主体是client端发送数据给server端,server那边接收到信息就发送一条固定的确认信息给client。 出现的问题就是运行的时候会固定丢掉第二次返回的数据,第一次和其他时候的都正常。打断点调试的时候也是正常的,很懵啊。。 感觉跟UI刷新有关,却又解决不了。另开线程接收也会有这个问题。贴上代码,求助大神。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; namespace SocketDemo_Client { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private Socket soc_client = null; private byte[] socket_buf = null; private Thread t_listener = null; private void MainForm_Load(object sender, EventArgs e) { if (socket_buf == null) { socket_buf = new byte[4096]; } } /// <summary> /// 连接按钮的点击事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnConnect_Click(object sender, EventArgs e) { IPAddress host_ip = IPAddress.Parse(this.txtIP.Text); IPEndPoint end_ipe = new IPEndPoint(host_ip, Convert.ToInt32(this.txtPort.Text)); soc_client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); soc_client.Connect(end_ipe); this.txtLog.AppendText("连接到" + soc_client.RemoteEndPoint.ToString() + "服务端。。。"); this.txtLog.AppendText(System.Environment.NewLine); } private void btnDisConnect_Click(object sender, EventArgs e) { this.txtLog.AppendText("关闭双向传输通道。。。"); this.txtLog.AppendText(System.Environment.NewLine); soc_client.Shutdown(SocketShutdown.Both); Thread.Sleep(500); this.txtLog.AppendText("关闭Socket对象。。。"); this.txtLog.AppendText(System.Environment.NewLine); soc_client.Close(); } private void btnSendMsg_Click(object sender, EventArgs e) { if (this.txtMsg.Text == "") { MessageBox.Show("输入发送内容啊骚年!"); return; } this.txtLog.AppendText("发送" + this.txtMsg.Text + "到服务端。。。"); this.txtLog.AppendText(System.Environment.NewLine); /* Array.Clear(socket_buf, 0, socket_buf.Length); socket_buf = Encoding.ASCII.GetBytes(this.txtMsg.Text); soc_client.Send(socket_buf); //清空发送框 this.txtMsg.Text = ""; //启动接收监听线程 if (t_listener == null) { t_listener = new Thread(MsgListener); t_listener.Start(); } if (t_listener.ThreadState == ThreadState.Suspended) { t_listener.Resume(); } */ string getStr = ""; getStr = SendAndReceive(this.txtMsg.Text); Thread.Sleep(2000); this.txtLog.AppendText("收到服务端信息:"); this.txtLog.AppendText(System.Environment.NewLine); this.txtLog.AppendText(getStr); this.txtLog.AppendText(System.Environment.NewLine); } /// <summary> /// /// </summary> private string SendAndReceive(string msg) { Array.Clear(socket_buf, 0, socket_buf.Length); socket_buf = Encoding.ASCII.GetBytes(msg); soc_client.Send(socket_buf); //清空发送框 this.txtMsg.Text = ""; string t = ""; soc_client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 500); Array.Clear(socket_buf, 0, socket_buf.Length); try { while (true) { int length = soc_client.Receive(socket_buf); t += Encoding.ASCII.GetString(socket_buf, 0, length); } } catch (SocketException e) { return t; } return t; } /// <summary> /// 接收线程 /// </summary> private void MsgListener() { string get_str = ""; soc_client.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReceiveTimeout,500); while (true) { Array.Clear(socket_buf, 0, socket_buf.Length); try { int length = soc_client.Receive(socket_buf); //接收活动连接发送的数据填充到buffer中 get_str += Encoding.ASCII.GetString(socket_buf, 0, length); //将缓存buffer的byte数据转换成字符串 } catch (SocketException se) { //线程委托去刷新信息 this.Invoke(new MethodInvoker(delegate { this.txtLog.AppendText("收到服务端信息:"); this.txtLog.AppendText(System.Environment.NewLine); this.txtLog.AppendText(get_str); this.txtLog.AppendText(System.Environment.NewLine); get_str = ""; })); //挂起线程 t_listener.Suspend(); continue; } } } } }

C# socket networkstream 接收数据

最近在做c/s,客户端用C#的Socket进行通信。接收数据开单独的接收线程使用networkstream进行接收 接收的方法大体上跟网上流传的一样 do { int readSize = mNetworkstream.Read(bytes, 0, 1024); if (readSize > 0) { //do sth } }while(mNetworkstream.DataAvailable) 这样接收局内网或者单机没问题,但是放到外网测试网络不稳定就接收不全。 搜集很多资料,也试过在发送Socket包之前加个包大小,然后在while中增加判断是否读到包的大小,可是一样接不全,中间好像掺杂了一些没用的数据? 我一个包很容易超过byte[10240],而且要整个包接收完才能处理数据。 请问C# Socket使用networkstream怎样才能接收完全呢? ps:也有听说过异步networkstream.beginread接收。鉴于网上一大抄,各种人贴各种代码片段根本就没用。有些有用但只能接收一次。。。 如果有beginread相关代码也希望大牛们贴出来参考一下,不要贴代码片段。。。 谢谢了~

急。。。。交作业 !java socket发送和接收数据

一、 项目需求 模拟socket发送(发送随机16进制数据)和接收(接收后解析成10进制),并在前台进行显示和规则判断,判断符合条件的数据,向前台发送报警信息。 模拟两组数据同时发送(并发),发送间隔5秒。 二、 流程说明 ![图片说明](https://img-ask.csdn.net/upload/201711/07/1510034044_771810.png) 用户角色为两个,A角色接收报警,并对报警进行处理(如点击确认按钮),处理后B角色才能看到这条报警信息。同时两个角色都可以查询历史报警。 三、 编码要求 编码规范结构清晰,注释规范。 四、 项目输出 可运行的项目代码;需求分析;设计说明书;项目总结。

VC socket编程,数据接收问题

用VC socket编程时,用recv函数接收字符串数据,只能接收到前4个字符,多于4个字符的都是“烫”字乱码。这是什么问题?怎么解决? char cs[100]; case FD_READ: { CString num=""; //定义字符串,用于保存待显示字符 ::recv(s1,cs,strlen(cs),0); //接收来自客户端的字符串数据 GetDlgItem(IDC_TEXT)->GetWindowText(num); //获取消息显示框中原有的字符 num+="\r\n"; //添加换行符 num+=(LPTSTR)::inet_ntoa(add1.sin_addr); //将客户端IP换成字符串 num+=":\r\n"; //添加换行符 num+=(LPTSTR)cs; //将接收到的字符串添加到显示字符串 num+=":\r\n"; //添加换行符 GetDlgItem(IDC_TEXT)->SetWindowText(num); //将字符串显示到消息显示框 }

C#里用socket收发udp数据的问题

一:用udp收发数据,为什么接收方要发一帧数之后才能接收到数据? private Socket SetupUdpSocketObject(string localIp, string localPort, string remoteIp, string remotePort) { //得到本机IP,设置TCP端口号 var ip = new IPEndPoint(IPAddress.Parse(localIp), int.Parse(localPort)); var ret = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //绑定网络地址 ret.Bind(ip); var sender = new IPEndPoint(IPAddress.Any, 0); _remote = sender; EndPoint point = new IPEndPoint(IPAddress.Parse(remoteIp), int.Parse(remotePort)); ret.SendTo(new byte[] { 1, 2, 3 }, point); //发送一帧数据才能收到数据 return ret; } private void ProcessUdpData() { while (true) { var data = new byte[DataMaximumLength]; //发送接受信息 var recv = _udpSocket.ReceiveFrom(data, ref _remote); _recorder.RecordBytes(data, 0, recv); //记录数据 var cell = new AzimuthCell(data); NotifyAllObservers(cell); //发送通知 } } 如果不写ret.SendTo(new byte[] { 1, 2, 3 }, point); 就收不到数据。 二:socket接收和发送数据我都是用线程发送,一个while(true)循环,反复sendto发缓存区,反复recvfrom,但是这样两个线程的占用率很高,有没有其他办法收发数据,除了beginsendto和beginrecvfrom

qt 线程中接收socket数据

#ifndef TCP_THREAD_H #define TCP_THREAD_H #include <QThread> #include <QTcpSocket> #include <QTcpServer> #define MAX_SEND_MSG_LEN 68 struct _loop_buf { int num_of_unit; // Number of data units int unit_size; int rhead; // Head for read int whead; // Head for write void *buf_head; }; class TcpThread : public QThread { Q_OBJECT private: QTcpServer *tcpServer; QTcpSocket *socket; QString ipAddress; quint16 destinationPort; int Flag; bool quit; struct _loop_buf loop_buf; void run() Q_DECL_OVERRIDE; void processMessage(char *msg); int init_loop_buf(struct _loop_buf *loop_buf, int num_of_unit, int unit_size); void reset_loop_buf(struct _loop_buf *loop_buf); void release_loop_buf(struct _loop_buf *loop_buf); int read_data_from_loop_buf(struct _loop_buf *loop_buf, void *data_unit); QByteArray bytes; QByteArray byteGet; public: TcpThread(QString ipAddress, quint16 destinationPort, QObject *parent = 0); ~TcpThread(); int addMessage(void *data_unit); signals: void error(int socketError, const QString &message); public slots: void finishWork(void); void newConnectionSlot(); void dataReceived(); }; #endif // TCP_THREAD_H .h文件 ``` #if defined(_MSC_VER) && (_MSC_VER >= 1600) #pragma execution_character_set("utf-8") #endif //#define MAX_SEND_MSG_LEN = 68 #include "TcpThread.h" #include "widget.h" #include <QDebug> TcpThread::TcpThread(QString ipAddress, quint16 destinationPort, QObject *parent) : QThread(parent), quit(false) { this->ipAddress = ipAddress; this->destinationPort = destinationPort; // Initialize loop buffer // Max length of messages to be sent is 68 bytes. if (init_loop_buf(&loop_buf, 128000, MAX_SEND_MSG_LEN) != 0) { qDebug() << "Can't initialize loop buffer."; return; } } TcpThread::~TcpThread() { // Wait for the end of the thread. quit = true; wait(); } void TcpThread::run() { // // At here, it is in the execution context of newly created thread. // So, it is better to define or create objects here. // Or, following error may occurred: // QObject: Cannot create children for a parent that is in a different thread // char *msg;//, *sendMsg; int conn_timeout = 30000; int read_timeout = 5000; int write_timeout = 5000; int bytesToRead, readBytes; int bytesToWrite, writeBytes; int ret; int gotMessageHead = 0; int toGetNewMessage = 0; //msg = (char *)calloc(65536 + 128, 1); msg = (char *)calloc(MAX_SEND_MSG_LEN, 1); if (msg == NULL) { qDebug() << "Can't allocate memory."; return; } tcpServer = new QTcpServer(); socket = new QTcpSocket(); //connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newConnectionSlot()), Qt::DirectConnection); if (!tcpServer->isListening()) { qDebug() << ipAddress; //if (tcpServer->listen(QHostAddress::QHostAddress(ipAddress), 16512)) if (tcpServer->listen(QHostAddress::Any, 16512)) { //m_pEdt_Info->append(QObject::tr("打开监听端口成功!111")); qDebug()<< QObject::tr("打开监听端口成功!111"); socket = tcpServer->nextPendingConnection(); // //connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater())); connect(socket, SIGNAL(readyRead()),this, SLOT(dataReceived())); } else { //m_pEdt_Info->append(QObject::tr("打开监听端口失败!")); qDebug()<< QObject::tr("打开监听端口失败!11"); } } else { //m_pEdt_Info->append(QObject::tr("正在监听中...!")); qDebug()<< QObject::tr("正在监听中...!"); } qDebug() << "Connected to" << ipAddress; // reset read variables readBytes = 0; bytesToRead = 4; gotMessageHead = 0; // reset write variables writeBytes = 0; toGetNewMessage = 1; } void TcpThread::processMessage(char *msg) { qDebug() << "Receive message:" << *(unsigned short *)msg << ". Length:" << *(unsigned short *)(msg + 2); } void TcpThread::finishWork(void) { quit = true; } int TcpThread::init_loop_buf(struct _loop_buf *loop_buf, int num_of_unit, int unit_size) { unsigned long long total_size; total_size = (unsigned long long)unit_size * (unsigned long long)num_of_unit; if (total_size > 0x7fffffff) { printf("Memory to be allocated is too large.\n"); return -1; } if (num_of_unit > 0x7ffffff0) { printf("Buffer size can't exceed 0x7ffffff0.\n"); return -1; } loop_buf->num_of_unit = num_of_unit; loop_buf->unit_size = unit_size; loop_buf->rhead = 0; loop_buf->whead = 0; loop_buf->buf_head = malloc(total_size); if (loop_buf->buf_head == NULL) { printf("Can't allocate memory for the loop buffer.\n"); return -1; } return 0; } // Be careful to call this function. You must make sure that // nobody is using the loop buffer pointed by 'loop_buf', // or error may occur. void TcpThread::reset_loop_buf(struct _loop_buf *loop_buf) { loop_buf->rhead = 0; loop_buf->whead = 0; } void TcpThread::release_loop_buf(struct _loop_buf *loop_buf) { free(loop_buf->buf_head); } // // Return value: // 0: Success. // -1: The loop buffer is NULL. // int TcpThread::read_data_from_loop_buf(struct _loop_buf *loop_buf, void *data_unit) { if (loop_buf->rhead == loop_buf->whead) { // The buffer is null. return -1; } // // Do your work here, you can read data from the loop buffer. // Following is just an example. // // Note: // Must copy the data out, or the content of the data unit may be // overwritten. // memcpy(data_unit, (char *)loop_buf->buf_head + loop_buf->rhead * loop_buf->unit_size, (size_t)loop_buf->unit_size); if (loop_buf->rhead == (loop_buf->num_of_unit - 1)) { loop_buf->rhead = 0; } else { loop_buf->rhead++; } return 0; } // // --- IMPORTANT --- // There is no mutex to avoid race condition in the function's implementation. // So, to call this function from only one code source. // //Return value: // 0: Success. // -1: The loop buffer is full. // int TcpThread::addMessage(void *data_unit) { int tmp_whead = 0; tmp_whead = loop_buf.whead + 1; if (tmp_whead >= loop_buf.num_of_unit) { tmp_whead = 0; } if (tmp_whead == loop_buf.rhead) { // The buffer is full. return -1; } // // Do your work here, you can write data to the loop buffer. // Following is just an example. // memcpy((char *)loop_buf.buf_head + loop_buf.whead * loop_buf.unit_size, data_unit, (size_t)loop_buf.unit_size); loop_buf.whead = tmp_whead; return 0; } void TcpThread::newConnectionSlot() { //m_pEdt_Info->append(QObject::tr("有新客户端连接到服务器")); socket = tcpServer->nextPendingConnection(); connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater())); connect(socket, SIGNAL(readyRead()),this, SLOT(dataReceived())); } void TcpThread::dataReceived() { bytes = socket->readAll(); qDebug() << bytes.length() << bytes.size(); //if (bytes.size()=0) waitfo if (byteGet.size()!=0){ byteGet.append(bytes.left(68-byteGet.size())); bytes.remove(0,68-byteGet.size()); qDebug() << byteGet.length() << bytes.size(); } for (;bytes.size()>=68;){ byteGet = bytes.left(68); //m_pEdt_Info->append(byteGet.toHex()); bytes.remove(0,68); qDebug() << byteGet.length() << bytes.size(); } if (bytes.size()>0&&bytes.size()<68){ byteGet = bytes; bytes.remove(0,byteGet.size()); qDebug() << byteGet.toHex(); qDebug() << byteGet.length() << bytes.size(); //bytes = m_pSocket->readLine(); //m_pServer->close(); } } ``` .cpp文件 线程中接收数据,使用信号机制可不可以啊? 我用connect(socket, SIGNAL(readyRead()),this, SLOT(dataReceived())); 发现Slot里面定义的接收数据并未调用到。为什么,是this的问题,还是不应该这样使用信号机制。或者还有别的什么好方法吗,麻烦各位大神热点,感激

C#通过socket接收数据,提示转换无效

我用socket接收数据,在接收这个方法中直接使用接收到的值,一切正常 可是我向其他方法传递值,其他方法中对这个值进行调用,出现“转换无效” 不知道什么情况,网上说是线程安全的问题 我用委托的方式和Control.CheckForIllegalCrossThreadCalls = false; 的方法 都不行

java nio socket 异步接收数据

nio socket 异步接收数据,如何确定收接的数据,就是发送的返回的?有谁研究过没。

[新手]关于socket.io接收tcp服务器数据后转发给客户端的问题【一句话就能解决?】

如标题,接收到了tcp服务器的数据后,想转发给客户端。但是socket.io文档似乎没有这种方法。直接上代码。 服务器部分: **var express=require('express'); var app=express(); var fs =require('fs'); var net=require('net'); var http=require('http').createServer(app); var io=require('socket.io').listen(http); //nodeServer需要的变量 var nodeServer = new net.Socket(); var ExBuffer = require('./ExBuffer'); var len = 4027; var offset=4; var exBuffer = new ExBuffer().uint32Head().littleEndian(); var sbuf = new Buffer(4); //存储客户端的连接实例 var aSocket={}; app.use(express.static('public')); app.get('/',function(req,res){ res.sendfile(__dirname+'/index.html'); }); //连接到C服务器 nodeServer.connect(3102, '127.0.0.1', function() { console.log('CONNECTED TO: 127.0.0.1:3102' ); // 建立连接后立即向服务器发送数据,服务器将收到这些数据 nodeServer.write('your socket has connected'); }); var server = http.listen(8888, '127.0.0.1',function () { var host = server.address().address var port = server.address().port console.log("welcome to http://%s:%s", host, port) }); // 同客户端建立连接 io.sockets.on('connection', function (socketIO) { aSocket=socketIO; // 从客户端接收数据,然后发送至Tomcat socketIO.emit("test","your websocket has connected"); socketIO.on('fromWebClient', function (webClientData) { }); //客户端断开连接 socketIO.on('disconnect', function () { console.log('DISCONNECTED FROM CLIENT'); }); }); // 从C服务器接收数据 nodeServer.on('data', function (data) { if(data.readUInt8(0)==170){ sbuf.writeUInt32LE(len,0);//写入包长 exBuffer.put(sbuf); exBuffer.put(data); } else{ exBuffer.put(data); } console.log('nodeServer'+data.length); }); //当nodeServer收到完整的数据包时 exBuffer.on('data', function(buffer) { console.log('>> nodeServer receive data.length:'+buffer.length); //console.log(buffer); //console.log(buffer.readInt32LE(826)); var useData=byteArrayUntil.getUseJson(buffer,offset); console.log(aSocket); aSocket.emit['pushToWebClient',useData.hz]; }); // 为nodeServer添加“data”事件处理函数 // data是服务器发回的数据 // 为客户端添加“close”事件处理函数 nodeServer.on('close', function() { console.log('Connection closed'); }); //构造一个遍历函数,分别返回array或者json var byteArrayUntil=new function(){ this.getUseData=function(data,offset){ var arr=[]; for(var i=0;i<=799;i++){ arr.push(data.readInt32LE(826+i*offset)); } return arr; } this.getUseJson=function(data,offset){ var arr=[]; for(var i=0;i<=500;i++){ arr.push(data.readInt32LE(826+i*offset)); } return {'hz':arr}; } }();** 客户端部分:(很多无用的就贴关键的了,其实这个可以暂时无视) <script> var socket = io.connect(); socket.on("test", function (data) { console.log(data); }); socket.on('pushToWebClient', function (data) { console.log(data); }); 现在问题就是服务器的这一部分: exBuffer.on('data', function(buffer) { console.log('>> nodeServer receive data.length:'+buffer.length); //console.log(buffer); //console.log(buffer.readInt32LE(826)); var useData=byteArrayUntil.getUseJson(buffer,offset); console.log(aSocket); aSocket.emit['pushToWebClient',useData.hz]; }); 我把数据接收到了,最后一句转发给客户端不会。ps:不用管对应id问题,我只需要简单实现转发数据即可。 参考过这个文档(如果知道上面怎么处理可以不用继续看了): var http = require('http'), 2 net = require('net'), 3 app = http.createServer().listen('8181'), 4 io = require('socket.io').listen(app), 5 nodeServer = new net.Socket(); 6 // 连接到Tomcat 7 nodeServer.connect(8007, '127.0.0.1', function() { 8 console.log('CONNECTED'); 9 }); 10 // 存储客户端的WebSocket连接实例 11 var aSocket = {}; 12 // 同客户端建立连接 13 io.sockets.on('connection', function (socketIO) { 14 // 从客户端接收数据,然后发送至Tomcat 15 socketIO.on('fromWebClient', function (webClientData) { 16 // 存储至映射表 17 aSocket[socketIO.id] = socketIO; 18 // 发送至Tomcat的数据中添加socket_id 19 webClientData['sid'] = socketIO.id; 20 // 发送String类型的数据至Tomcat 21 nodeServer.write(JSON.stringify(webClientData)); 22 }); 23 // 客户端断开连接 24 socketIO.on('disconnect', function () { 25 console.log('DISCONNECTED FROM CLIENT'); 26 }); 27 }); 28 29 // 从Tomcat接收数据 30 nodeServer.on('data', function (data) { 31 var jsonData = JSON.parse(data.toString()); 32 // 分发数据至客户端 33 for (var i in jsonData.list) { 34 aSocket[jsonData.list[i]['sid']].emit('pushToWebClient', jsonData.list[i].data); 35 } 36 }); 有这么一句 aSocket[jsonData.list[i]['sid']].emit('pushToWebClient', jsonData.list[i].data); 虽然它实现的是通过id来实现建立一一对应连接,但是它还是独立出来使用了(查了一些资料都是在一起用的), 到底该怎么实现呢?ps:不用管对应id问题,我只需要简单实现转发数据即可。 求大神帮助。

androidSocket通信TCP接收数据问题

rivate Button send; private TextView rec; private static Socket client; private PrintWriter write; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rec=(TextView)findViewById(R.id.textView3);; Thread aa=new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { //服务器的ip的地址 和端口号 client=new Socket(InetAddress.getByName("192.168.1.101"),4312); BufferedReader read=new BufferedReader (new InputStreamReader(client .getInputStream())); rec.setText("123"); String s = ""; while(true){ s=read.readLine(); rec.setText(s); } } catch(IOException e){ rec.setText("123123"); } } }); aa.start(); } 在 while(true){ s=read.readLine(); rec.setText(s); }为什么只能接收服务器的一次消息第二次手机就会跳出程序

socket短连接接收服务器返回数据的问题

Socket soc=null; InputStream in=null; OutputStream out=null; soc=new Socket(host,port); in=soc.getInputStream(); out=soc.getOutputStream(); String length=String.format("%04d",data.length()); System.out.println("发送的数据长度为"+length); out.write(length.getBytes()); out.write(data.getBytes()); out.flush(); 这个是我通过短连接的方式向服务器发送的数据,怎样接收服务器返回的数据,求各位大神补充一下,之前没写过这种连接方式的代码。

软件测试入门、SQL、性能测试、测试管理工具

软件测试2小时入门,让您快速了解软件测试基本知识,有系统的了解; SQL一小时,让您快速理解和掌握SQL基本语法 jmeter性能测试 ,让您快速了解主流来源性能测试工具jmeter 测试管理工具-禅道,让您快速学会禅道的使用,学会测试项目、用例、缺陷的管理、

计算机组成原理实验教程

西北工业大学计算机组成原理实验课唐都仪器实验帮助,同实验指导书。分为运算器,存储器,控制器,模型计算机,输入输出系统5个章节

Java 最常见的 200+ 面试题:面试必备

这份面试清单是从我 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘在 Java 技术栈中,还有那些知识点是我不知道的,我想找到这些技术盲点,然后修复它,以此来提高自己的技术水平。虽然我是从 2009 年就开始参加编程工作了,但我依旧觉得自己现在要学的东西很多,并且学习这些知识,让我很有成就感和满足感,那所以何乐而不为呢? 说回面试的事,这份面试...

winfrom中嵌套html,跟html的交互

winfrom中嵌套html,跟html的交互,源码就在里面一看就懂,很简单

玩转Python-Python3基础入门

总课时80+,提供源码和相关资料 本课程从Python零基础到纯Python项目实战。内容详细,案例丰富,覆盖了Python知识的方方面面,学完后不仅对Python知识有个系统化的了解,让你从Python小白变编程大牛! 课程包含: 1.python安装 2.变量、数据类型和运算符 3.选择结构 4.循环结构 5.函数和模块 6.文件读写 7.了解面向对象 8.异常处理

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:itxy41)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

基于VHDL的16位ALU简易设计

基于VHDL的16位ALU简易设计,可完成基本的加减、带进位加减、或、与等运算。

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

利用Verilog实现数字秒表(基本逻辑设计分频器练习)

设置复位开关。当按下复位开关时,秒表清零并做好计时准备。在任何情况下只要按下复位开关,秒表都要无条件地进行复位操作,即使是在计时过程中也要无条件地进行清零操作。 设置启/停开关。当按下启/停开关后,将

董付国老师Python全栈学习优惠套餐

购买套餐的朋友可以关注微信公众号“Python小屋”,上传付款截图,然后领取董老师任意图书1本。

Python可以这样学(第一季:Python内功修炼)

董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则表达式应用、面向对象编程、文本文件与二进制文件操作、目录操作与系统运维、异常处理结构。

计算机操作系统 第三版.pdf

计算机操作系统 第三版 本书全面介绍了计算机系统中的一个重要软件——操作系统(OS),本书是第三版,对2001年出版的修订版的各章内容均作了较多的修改,基本上能反映当前操作系统发展的现状,但章节名称基

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

微信公众平台开发入门

本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

SEIR课程设计源码与相关城市数据.rar

SEIR结合学报与之前博客结合所做的一些改进,选择其中三个城市进行拟合仿真SEIR结合学报与之前博客结合所做的一些改进,选择其中三个城市进行拟合仿真SEIR结合学报与之前博客结合所做的一些改进,选择其

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

Java面试题大全(2020版)

发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environ...

定量遥感中文版 梁顺林著 范闻捷译

这是梁顺林的定量遥感的中文版,由范闻捷等翻译的,是电子版PDF,解决了大家看英文费时费事的问题,希望大家下载看看,一定会有帮助的

GIS程序设计教程 基于ArcGIS Engine的C#开发实例

张丰,杜震洪,刘仁义编著.GIS程序设计教程 基于ArcGIS Engine的C#开发实例.浙江大学出版社,2012.05

人工智能-计算机视觉实战之路(必备算法+深度学习+项目实战)

系列课程主要分为3大阶段:(1)首先掌握计算机视觉必备算法原理,结合Opencv进行学习与练手,通过实际视项目进行案例应用展示。(2)进军当下最火的深度学习进行视觉任务实战,掌握深度学习中必备算法原理与网络模型架构。(3)结合经典深度学习框架与实战项目进行实战,基于真实数据集展开业务分析与建模实战。整体风格通俗易懂,项目驱动学习与就业面试。 建议同学们按照下列顺序来进行学习:1.Python入门视频课程 2.Opencv计算机视觉实战(Python版) 3.深度学习框架-PyTorch实战/人工智能框架实战精讲:Keras项目 4.Python-深度学习-物体检测实战 5.后续实战课程按照自己喜好选择就可以

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

微信小程序开发实战之番茄时钟开发

微信小程序番茄时钟视频教程,本课程将带着各位学员开发一个小程序初级实战类项目,针对只看过官方文档而又无从下手的开发者来说,可以作为一个较好的练手项目,对于有小程序开发经验的开发者而言,可以更好加深对小程序各类组件和API 的理解,为更深层次高难度的项目做铺垫。

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

去除异常值matlab程序

数据预处理中去除异常值的程序,matlab写成

用verilog HDL语言编写的秒表

在秒表设计中,分模块书写。用在七段数码管上显示。输入频率是1KHZ.可以显示百分秒,秒,分。如要显示小时,只需修改leds里的代码和主模块代码。改程序以通过硬件电路验证。完全正确。

[透视java——反编译、修补和逆向工程技术]源代码

源代码。

相关热词 c# 开发接口 c# 中方法上面的限制 c# java 时间戳 c#单元测试入门 c# 数组转化成文本 c#实体类主外键关系设置 c# 子函数 局部 c#窗口位置设置 c# list 查询 c# 事件 执行顺序
立即提问
相关内容推荐