小编64b*_*uid的帖子

知道C中的任何跨平台套接字库(windows和Linux)吗?

我期待在linux和windows中进行套接字通信(监听,接受,连接,接收,发送,断开).我的项目是在C中,所以除非有人能想到我将C++库集成到C项目中的方法,否则库也必须在C中.

最终,我希望该库具有ipv6支持和非阻塞模式,但是,这些东西并不重要.

有谁知道任何库/跨平台示例代码?即使只是大型代码片段也会有所帮助.到目前为止,我发现的少数套接字库都是用C++编写的.

c sockets tcp cross-platform

14
推荐指数
2
解决办法
7032
查看次数

C++编译问题; 类方法

我已经开始编写一个非常简单的类,各种类方法似乎给我带来了问题.我希望问题是我,解决方案很简单.

命令g ++ -o main main.cpp给出了以下输出:

/usr/bin/ld: Undefined symbols:
Lexer::ConsoleWriteTokens()
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

main.cpp中:

#include<iostream>
#include"lexer.h"


int main(){

   Lexer lexhnd = Lexer();
    std::cout << "RAWR\n";
    lexhnd.ConsoleWriteTokens();
   std::cout << "\n\n";

return 0;
 }
Run Code Online (Sandbox Code Playgroud)

lexer.h:

#ifndef __SCRIPTLEXER
#define __SCRIPTLEXER

#include <iostream>
#include <string>
#include <vector>

#define DEF_TOKEN_KEYWORD 0

struct token{
 int flag;
 std::string data;
};

class Lexer
{
public:
//  bool IsTrue();
//  bool AddLine(char * line);
    void ConsoleWriteTokens(void);

private:
std::vector<token> TOK_list;

};


#endif
Run Code Online (Sandbox Code Playgroud)

lexer.cpp:

bool Lexer::IsTrue(){
return true; …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-construction methods class

10
推荐指数
1
解决办法
297
查看次数

创建Python电子邮件(接收)服务器

我正在尝试为Linux VPS生成一个简单的python脚本,它允许我接收邮件,(然后我可以在python中对它进行处理,比如将它打印到stdout).没有比这更复杂的了.

我不想使用'重'解决方案或服务器程序,我真的只是在我可以运行的简单python脚本之后,并且能够接收邮件.

Pythons的smtpd模块是否足以完成这项任务?到目前为止,我听到了相互矛盾的意见.如果没有,你还会提出什么建议?也许你自己一起攻击了一些代码?

在这个阶段,即使像拉姆森这样的项目看起来也太沉重(尽管如果我找不到更好的解决方案,这可能是不可避免的).

python linux email smtp

10
推荐指数
2
解决办法
8436
查看次数

OpenSSL:RSA加密/解密,密钥生成和密钥持久性

我正在尝试使用OpenSSL中的RSA构建一个需要以下内容的p2p应用程序:

-Encryption
-Decryption
-Generating Keys (done)
-Saving and loading keys (done)
-Saving the PUBLIC key as bytes so it can be sent over the sockets
-Loading keys from the above format
Run Code Online (Sandbox Code Playgroud)

我选择使用EVP功能,无论这意味着什么.但是,我很难找到我需要使用哪些函数来执行这些操作,以及以什么顺序执行.OpenSSL的官方文档似乎不存在.

有谁知道我需要以什么顺序使用哪些功能及其原型?周围的任何示例代码也都很好.

非常感谢,提前

twitchliquid64.

PS:这是我到目前为止所拥有的

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <openssl/rsa.h>
#include <openssl/evp.h>
#include <openssl/objects.h>
#include <openssl/x509.h>
#include <openssl/err.h>
#include <openssl/pem.h>
#include <openssl/ssl.h>
#include <openssl/engine.h>
#include <openssl/rand.h>

RSA* Generate_KeyPair(void)
{
  char rand_buff[16];
  EVP_PKEY *pkey = NULL;
  RSA* r;
  char* pass = "passgdfgf";//for now

  int bits = 512; …
Run Code Online (Sandbox Code Playgroud)

c++ openssl p2p rsa

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

从读者读取直到到达字符串

我正在尝试编写一个函数来保持从缓冲读取器读取,直到我点击某个字符串,然后停止读取并返回该字符串之前读取的所有内容.

换句话说,我想做同样的事情reader.ReadString(),除了取一个字符串而不是一个字节.

例如:

mydata, err := reader.ReadString("\r\n.\r\n") //obviously will not compile
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

提前致谢,

Twichy

修正案1:以前的尝试

这是我以前的尝试; 它写得很糟糕并且没有工作,但希望它能说明我想要做的事情.

func readDotData(reader *bufio.Reader)(string, error){
delims := []byte{ '\r', '\n', '.', '\r', '\n'}
curpos := 0
var buffer []byte
for {
    curpos = 0
    data, err := reader.ReadSlice(delims[0])
    if err!=nil{ return "", err }
    buffer = append(buffer, data...)
    for {
        curpos++
        b, err := reader.ReadByte()
        if err!=nil{ return "", err }
        if b!=delims[curpos]{
            for curpos >= 0{
                buffer = append(buffer, delims[curpos])
                curpos-- …
Run Code Online (Sandbox Code Playgroud)

string go

4
推荐指数
2
解决办法
3140
查看次数

TCP消息帧+ recv()[linux]:好的约定?

我正在尝试在Linux上创建一个p2p应用程序,我想尽可能高效地运行它.

我遇到的问题是管理数据包.我们知道,recv()缓冲区中可能随时有多个数据包,因此需要使用某种消息成帧系统来确保多个数据包不被视为一个大数据包.

所以目前我的数据包结构是:

(u16int Packet Length):(Packet Data)
Run Code Online (Sandbox Code Playgroud)

这需要两次调用recv(); 一个获取数据包大小,一个获取数据包.

这有两个主要问题:

1. A malicious peer could send a packet with a size header of 
  something large, but not send any more data. The application will 
  hang on the second recv(), waiting for data that will never come.
2. Assuming that calling Recv() has a noticeable performance penalty
  (I actually have no idea, correct me if I am wrong) calling Recv() twice 
  will slow the program down.
Run Code Online (Sandbox Code Playgroud)

为最佳效率和稳定性构建数据包/接收系统的最佳方法是什么?其他应用程序如何做到这一点?您有什么推荐的吗?

先感谢您.

sockets linux message tcp recv

2
推荐指数
1
解决办法
2915
查看次数

SERIAL外键可以设置为null吗?

问题:我有一张带有几个外键的表.我想让两个外键可选(也就是说,它们可以设置为NULL).当我尝试运行命令来创建表时,我收到错误:

错误:表"eventassociation"的列"activityid"的冲突NULL/NOT NULL声明

如果我尝试创建没有外键的NULL声明的表,那些外键隐式变为NOT NULL.

我怎样才能使外键activityIDroleIDnull为空?

谢谢,

hypoz

额外信息:

我在ubuntu 12.04上运行postgreSQL(apt-get上的版本).

这是有问题的表格:

CREATE TABLE eventAssociation (
  associationID SERIAL PRIMARY KEY,
  studentID VARCHAR(12) references volunteers(studentID),
  eventID SERIAL references events(eventID),
  activityID SERIAL references activities NULL,
  roleID SERIAL references roles(roleID) NULL,
  coordinatorConfirmed BOOLEAN,
  userRevokeable BOOLEAN
)
Run Code Online (Sandbox Code Playgroud)

作为参考,这是activities表的架构.除了具有不同的字段名称之外,角色表几乎完全相同.

CREATE TABLE activities (
  activityID SERIAL PRIMARY KEY,
  eventID integer references events(eventID),
  name varchar(128),
  description TEXT
)
Run Code Online (Sandbox Code Playgroud)

sql database postgresql

2
推荐指数
1
解决办法
791
查看次数

将数字打包到bitset(python,按位运算)

PIC单片机具有简单的指令集格式.每条指令正好是14位长,由不同位长的各种数字组成.

我正在尝试构建一个可以接受所有这些输入并构建表示该指令的数字的函数.

指令集格式

这就是我一直努力工作的原因:

def fileRegOp(opcode, d, f):
    out =  opcode << 13
    out = out | d << 7
    out = out | f
    return out

print "FIN:", bin(fileRegOp(1,True,15))
Run Code Online (Sandbox Code Playgroud)

它输出

FIN:0b10000010001111

哪个看起来不错,除了比特是错误的方式.我认为它应该是:

FIN:0b00000111111000

我已经看到SO上的解决方案涉及循环翻转位,但我相信有更好的方法.

什么是最优雅的方式来编写这个功能?

有关指令集的更多详细信息:数据表,请参见第121,122页

python bit-manipulation pic bit

0
推荐指数
1
解决办法
138
查看次数