标签: sockets

如何使用recv()接收大数据?

我使用c ++开发了客户端服务器程序,所以我希望收到超过500kb,我的客户端消息以"!"结束 ,所以我想收到,直到我的最后一个字节(!)收到,这是我的代码,它不起作用.它有什么问题.

do
  {
  int num = recv(*csock,  buf, bytesLeft,0);

if (num == 0)
{
  break;
}
else if (num < 0 && errno != EINTR)
{
  fprintf(stderr, "Exit %d\n", __LINE__);
  exit(1);
}
else if (num > 0)
{
  numRd += num;
  buf += num;
  bytesLeft -= num;
  fprintf(stderr, "read %d bytes - remaining = %d\n", num, bytesLeft);
}

  }

    while (bytesLeft != 0);
   fprintf(stderr, "read total of %d bytes\n", numRd);
Run Code Online (Sandbox Code Playgroud)

c++ sockets tcp client-server tcpsocket

-1
推荐指数
1
解决办法
4829
查看次数

错误的缓冲区长度(const char FAR*)

我有一个问题,我绕道功能recv(ws2_32.dll)并尝试读取数据.我得到leng parametr - 17但在实际缓冲区中只有2个字节的长度.

我的代码:

int WINAPI OwnSend(SOCKET s, const char FAR *buff, int leng, int flags )
{
    //why 'leng'==17 and (sizeof(char) * strlen(buff) + 1) == 2?
    return pTrampolineSend(s, buff, leng, flags);
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

c++ sockets winapi buffer

-1
推荐指数
1
解决办法
321
查看次数

无法将类型'string'隐式转换为'int'

我不断收到调试错误"无法在C#中隐式转换类型'字符串'到'int'".

这是我的代码片段:

private void button2_Click(object sender, EventArgs e) //button to start takedown
        {
            byte[] packetData = System.Text.ASCIIEncoding.ASCII.GetBytes("<Packet OF Data Here>");
            string IP = "127.0.0.1";
            int port = "80";

            IPEndPoint ep = new IPEndPoint(IPAddress.Parse(IP), port);

            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            client.SendTo(packetData, ep);
        }
Run Code Online (Sandbox Code Playgroud)

.net c# sockets asp.net visual-studio-2010

-1
推荐指数
2
解决办法
5万
查看次数

如何在多线程应用程序中使用锁?

请检查我的多线程代理检查器代码.它总是检查相同的代理.我想我需要使用锁吗?但是当我使用锁时,它只使用一个线程.但通常它是多线程的.这是什么问题?

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.IO;
using System.Net;
using System.Threading;

namespace ProxyChecker
{
    public partial class Main : Form
    {


        public Main()
        {
            InitializeComponent();

        }

        private void clearButton_Click(object sender, EventArgs e)
        {
            proxyList.Items.Clear();
        }

        private void clearButton2_Click(object sender, EventArgs e)
        {
            checkedList.Items.Clear();

        }

         Thread[] checkerThread;
        int checking;
        int beenChecked;
        private bool isRunning;
        private delegate void filterProxyHandler(int Index, bool Valid);
        static readonly object _locker = new object();


        private …
Run Code Online (Sandbox Code Playgroud)

c# sockets multithreading locking

-1
推荐指数
1
解决办法
168
查看次数

无法包含<sys/socket.h>和<arpa/inet.h>

我为客户端和服务器创建了一个C程序,用于将数据从一台计算机传输到另一台计算机.以下代码

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <iostream.h>

void main()
{
    int sockfd;
    struct sockaddr_in saddr;
    char *xyz,xyz1;
    sockfd = socket(AF_INET,SOCK_STREAM,0);
    saddr.sin_family = AF_INET;
    saddr.sin_port=htons(5001);
    saddr.sin_addr.s_addr = inet_aton("192.168.0.254");
    connect(sockfd,(struct sockaddr *)&saddr,sizeof(saddr));
    fgets(xyz);
    write(sockfd,xyz,sizeof(xyz));
    read(sockfd,xyz1,sizeof(xyz1));
    fputs(xyz);
    close(sockfd);
}               
Run Code Online (Sandbox Code Playgroud)

但它在trubo c ++ 3.0 IDE中显示以下错误

  UNABLE TO OPEN INCLUDE FILE 'SYS/SOCKET.H'
  UNABLE TO OPEN INCLUDE FILE 'NETINET/IN.H'
  UNABLE TO OPEN INCLUDE FILE 'ARPA/INET.H'
Run Code Online (Sandbox Code Playgroud)

c sockets

-1
推荐指数
1
解决办法
4518
查看次数

C ++ Winsock发送文件

我可以发送文件的简单服务器和客户端,并且我需要你们看看此源是否已完成。因为我认为它不会下载完整文件。

也许对此来源有限制?因为我上传/下载了200K,还有更多..

服务器:

#include <WinSock2.h>
#include <Windows.h>
#include <stdio.h>

#pragma comment(lib, "Ws2_32.lib")

SOCKET Socket, Sub;
WSADATA Winsock;
sockaddr_in Addr;
int Addrlen = sizeof(sockaddr_in);
char Buffer[256];
char *Str;
sockaddr_in IncomingAddress;
int AddressLen = sizeof(IncomingAddress);

int main()
{
    WSAStartup(MAKEWORD(2, 2), &Winsock);    // Start Winsock

    if(LOBYTE(Winsock.wVersion) != 2 || HIBYTE(Winsock.wVersion) != 2)    // Check version
    {
        WSACleanup();
        return 0;
    }

     Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    ZeroMemory(&Addr, sizeof(Addr));
    Addr.sin_family = AF_INET;
    Addr.sin_port = htons(6091);  
    bind(Socket, (sockaddr*)&Addr, sizeof(Addr));

    if(listen(Socket, 1) == SOCKET_ERROR)
    {
        printf("listening error\n"); …
Run Code Online (Sandbox Code Playgroud)

c++ sockets winapi winsock winsock2

-1
推荐指数
1
解决办法
1万
查看次数

Java while(true) 循环运行一次

我正在编写一个服务器-多Thread客户端通信应用程序,我需要制作一个循环并接受客户端。我目前的代码是:

Thread acceptor = new Thread() {
    public void run() {
        while(true){
            System.out.println("looking for clients");
            try{
                Socket s = serverSocket.accept();
                    clientList.add(new ConnectionToClient(s));
                }
                catch(IOException e){ e.printStackTrace(); }
            }
        }
    }
};
acceptor.setDaemon(true);
acceptor.start();
Run Code Online (Sandbox Code Playgroud)

但是,当我运行我的应用程序时,文本looking for clients只出现一次,并且没有客户端可以连接。

我不明白为什么我的while(true)循环实际上没有循环,并且只运行一次。

编辑:

ConnectionToClient构造函数是:

ConnectionToClient(Socket socket) throws IOException {
    this.socket = socket;
    in = new ObjectInputStream(socket.getInputStream());
    out = new ObjectOutputStream(socket.getOutputStream());

    Thread read = new Thread(){
        public void run(){
            while(true){
                try {
                    Object obj = in.readObject();
                    messages.put(obj);
                } …
Run Code Online (Sandbox Code Playgroud)

java sockets multithreading loops server

-1
推荐指数
1
解决办法
327
查看次数

c套接字连接错误关闭套接字

这是代码

    tcp_sockfd = socket(AF_INET , SOCK_STREAM , 0);
    if (tcp_sockfd == -1) {
        printf("Could not create socket");
        return 1;                                                                                                                                           
    }

    if (connect(tcp_sockfd , (struct sockaddr *)&config->tcp_srvaddr , sizeof(config->tcp_srvaddr)) < 0) {
        printf("connect failed. return 1\n");
        return 1;
    }

    struct timeval tv = {30, 0};
    setsockopt(tcp_sockfd, SOL_SOCKET, SO_RCVTIMEO, (struct timeval *)&tv, sizeof(struct timeval));

    if(send(tcp_sockfd , data , len , 0) < 0) {
        printf("send failed.\n");    
        return 1;
    }
    printf("Send complete\n");

    close(tcp_sockfd);
Run Code Online (Sandbox Code Playgroud)

如果套接字发送或连接失败,我是否需要关闭套接字?或者如果错误时钟自动关闭?

c sockets

-1
推荐指数
1
解决办法
1699
查看次数

当我点击任何东西时,我的 P2P 应用程序冻结

我正在我的项目中工作,我想在 C# 中使用套接字和线程进行本地 P2P 通信。我在运行代码时遇到了一些麻烦。

我认为问题出在下一个 while 循环中

while (true) 
{
    try 
    {
        TcpListener listener = new TcpListener(IPAddress.Parse(STD_IP), HOST_PORT);
        listener.Start();
        using (TcpClient client = listener.AcceptTcpClient())
        using (NetworkStream nwStream = client.GetStream()) 
        {
            Thread listenerThread = new Thread(() => 
            {
                string message = Receive(nwStream);
                updateBoard(message);
            });
            listenerThread.Start();

            string response = stanje;

            Send(nwStream, response);
        }
    }
    catch (Exception er) 
    {
        MessageBox.Show("Communication error: \n\n" + er.Message + "\n" + er.StackTrace);
    }
} 
Run Code Online (Sandbox Code Playgroud)

c# sockets multithreading

-1
推荐指数
1
解决办法
48
查看次数

用结构前缀初始化是什么意思?

我正在阅读一些代码并遇到以下语句:

 struct sockaddr_in server
Run Code Online (Sandbox Code Playgroud)

我知道这sockaddr_in是一些预定义的,struct但为什么我们把它struct作为前缀?也如下所示,尝试了类似的事情

在此处输入图片说明

我不能只写:

sockaddr_in server
Run Code Online (Sandbox Code Playgroud)

c sockets struct

-1
推荐指数
1
解决办法
53
查看次数