标签: send

C socket:recv并发送所有数据

我想获得类似于此的行为:

  1. 服务器运行
  2. 客户端运行
  3. 客户端键入"帮助"或其他命令
  4. 服务器响应得当
  5. 去3

问题是,当我的函数excCommand("help")运行时,只接收并打印一个小文本.我的文本文件是这样的:

COMMAND HELP:

help - Display help
quit - Shutdown client
Run Code Online (Sandbox Code Playgroud)

仅打印命令帮助.另一个问题是,当我输入命令时,没有打印任何内容,并且在2命令客户端退出之后.特别是这件作品:

while (quit)
    {
        getLine("client> ", command, 10);
        if (strcmp(command, "quit") == 0)
            quit = 0;
        else
            excCommand(command);
    }
Run Code Online (Sandbox Code Playgroud)

这是服务器:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include "common.h"

int main(int argc, char *argv[])
{
    if (argc != 2)
        ErrorWithUserMessage("Parameter(s)", "<Server Port>");

    char *service = argv[1];

    int servSock = SetupTCPServerSocket(service);
    if (servSock < 0)
        ErrorWithUserMessage("SetupTCPServerSocket() failed: ", "unable to establish");

    unsigned int …
Run Code Online (Sandbox Code Playgroud)

c sockets client-server send recv

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

Raw Socket Linux发送/接收数据包

在接收数据包时遇到一些问题.我可以接收和读取传入的数据包,但我想我不会与任何主机握手.我只想在收到答案的情况下将数据包发送到具有开放端口的远程计算机,以查看TTL(生存时间)和窗口大小.有谁知道错误在哪里?(我对C编程知之甚少)

码:

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <errno.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <net/ethernet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>

struct pseudohdr {
    u_int32_t src_addr;
    u_int32_t dst_addr;
    u_int8_t padding;
    u_int8_t proto;
    u_int16_t length;
};

struct data_4_checksum {
    struct pseudohdr pshd;
    struct tcphdr tcphdr;
    char payload[1024];
};
unsigned short comp_chksum(unsigned short *addr, int len) {
    long sum = 0;

    while (len > 1) {
        sum += *(addr++);
        len -= 2;
    }

    if (len > 0)
        sum …
Run Code Online (Sandbox Code Playgroud)

c sockets networking send recv

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

TCP发送不会返回导致崩溃的过程

如果连接了tcp服务器和客户端,我想确定客户端何时不再连接.我以为我可以通过尝试向客户端发送消息来做到这一点,一旦send()返回-1,我就可以拆掉套接字.这个实现在Windows上可以找到,但是当我尝试在带有BSD套接字的Linux上执行此操作时,在服务器端应用程序上调用send()会导致我的服务器应用程序在客户端不再连接时崩溃.它甚至没有返回-1 ...只是终止程序.

请解释为什么会这样.提前致谢!

sockets crash tcp send

8
推荐指数
1
解决办法
3635
查看次数

同时在一个套接字上recv()和send()是否安全?

我记得在某地读过一个套接字可以看作是两个独立的半双工通道.这是否意味着recv()send()同一插座,实际上无关紧要?

  • 如果是这样,是根据定义还是特定于实施?
  • 如果没有,两者如何相互干扰?

谢谢.

sockets concurrency send recv

8
推荐指数
1
解决办法
1424
查看次数

无法将数据写入传输连接:远程主机强制关闭现有连接

我有一个更新服务器通过TCP端口12000发送客户端更新.单个文件的发送仅在第一次成功,但之后我在服务器上收到错误消息"无法将数据写入传输连接:现有连接被远程主机强行关闭".如果我在服务器上重新启动更新服务,它只会再次运行一次.我有正常的多线程Windows服务.

服务器代码

namespace WSTSAU
{
    public partial class ApplicationUpdater : ServiceBase
    {
        private Logger logger = LogManager.GetCurrentClassLogger();
        private int _listeningPort;
        private int _ApplicationReceivingPort;
        private string _setupFilename;
        private string _startupPath;
        public ApplicationUpdater()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            init();
            logger.Info("after init");
            Thread ListnerThread = new Thread(new ThreadStart(StartListener));
            ListnerThread.IsBackground = true;
            ListnerThread.Start();
            logger.Info("after thread start");
        }

        private void init()
        {
            _listeningPort = Convert.ToInt16(ConfigurationSettings.AppSettings["ListeningPort"]);
            _setupFilename = ConfigurationSettings.AppSettings["SetupFilename"];
            _startupPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).Substring(6);
        }

        private void StartListener()
        {
            try
            {
                logger.Info("Listening Started");
                ThreadPool.SetMinThreads(50, …
Run Code Online (Sandbox Code Playgroud)

c# tcp file send

8
推荐指数
1
解决办法
9963
查看次数

如何将我用pygame制作的游戏发送给其他人?

我刚开始用pygame制作游戏,我的第一次尝试仍在进行中,但我想知道如何将我的游戏发布或发送给没有pygame的朋友,以便他们可以播放它.我在网上看了但没找到任何有用的东西.

python publish pygame send

8
推荐指数
1
解决办法
5589
查看次数

通过WhatsApp发送消息意图

如何从我的应用程序发送按摩到whatsapp中的特殊号码,我知道这个代码分享按摩到分组或联系whatsapp

Intent waIntent = new Intent(Intent.ACTION_SEND);
waIntent.setType("text/plain");
String text = "Sorry For Interruption,I'm Just Trying Something";
waIntent.setPackage("com.whatsapp");

if (waIntent != null) {
    waIntent.putExtra(Intent.EXTRA_TEXT, text);//
    startActivity(Intent.createChooser(waIntent,"Share with"));
Run Code Online (Sandbox Code Playgroud)

但我想按照特殊号码发送按摩,如"966xxxxxxx"我怎么能这样做?

android send android-intent whatsapp

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

如何在使用expect'send'命令时将输出存储在变量中

谢谢.

但是需要帐户和密码.所以我必须发送它们然后发送ovs-vsctl命令.

脚本是这样的:

spawn telnet@ip 

expect -re "*login*" {
       send "root"
}

expect -re "password*" {
       send "****"
}

send "ovs-vsctl *******"
Run Code Online (Sandbox Code Playgroud)

我想存储这个命令的输出send "ovs-vsctl ****",但很多次我得到一些输出命令"发送"密码"",我怎么能得到输出send "ovs-vsctl****".命令的输出send "ovs-vsctl ***是两个字符串,每个字符串占一行.

谢谢.

tcl expect send output

8
推荐指数
2
解决办法
3万
查看次数

对send()的多次调用合并为一次调用recv()

我有一个客户端 - 服务器应用程序.

客户端使用两个不同的send()调用发送一个字符串,后跟一个整数.这两个数据应该存储在服务器上的两个不同变量中.

问题是发送的两个变量都是在recv()通话中接收的.因此,由两个不同的send()s 发送的两个字符串被链接并存储在第一个的缓冲区中recv().

server.c:

printf("Incoming connection from client %s:%i accepted\n",inet_ntoa(clientSocketAddress.sin_addr),ntohs(clientSocketAddress.sin_port));


memset(buffer,0,sizeof(buffer));
int sizeofMessage;
if ((recv(clientSocket,buffer,MAXBUFFERSIZE,0)==sizeofMessage)<0)
{
  printf("recv failed.");
  closesocket(serverSocket);
  clearWinsock();
  return EXIT_FAILURE;
}

char* Name=buffer;
printf("Name: %s\n",Name);

if ((recv(clientSocket,buffer,MAXBUFFERSIZE,0))<0)
{
  printf("bind failed.");

  closesocket(serverSocket);
  clearWinsock();
  return EXIT_FAILURE;
}

int integer=ntohs(atoi(buffer));
printf("integer: %i\n",intero);
Run Code Online (Sandbox Code Playgroud)

client.c:

if (send(clientSocket,Name,strlen(Name),0)!=strlen(Name))
{
  printf("send failed");

  closesocket(clientSocket);
  clearWinsock();
  return EXIT_FAILURE;
}

printf("client send: %s",Name);

int age=35;
itoa(htons(age),buffer,10);
sizeofBuffer=strlen(buffer);
if (send(clientSocket,buffer,sizeofBuffer,0)!=sizeofBuffer)
{
  printf("bind failed.");

  closesocket(clientSocket);
  clearWinsock();
  return EXIT_FAILURE;
} …
Run Code Online (Sandbox Code Playgroud)

c sockets tcp send recv

8
推荐指数
1
解决办法
7419
查看次数

ssl:发送erlang块

我正在使用从TCP套接字升级的SSL套接字.当我尝试使用ssl:send通过该套接字发送一些数据时,它会阻塞.我有底层TCP套接字的send_timeout选项.有人可以告诉我为什么ssl:发送挂起以及它的解决方案是什么?提前致谢.

erlang ssl block send

7
推荐指数
0
解决办法
449
查看次数