C语言中SOCKET编译不了
#include <stdio.h>
#include <WinSock2.h>


#pragma comment(lib,"ws2_32.lib"

void main()
{       //main开头

    int ret;
    WSADATA wsaData;
    ret = WSAStartup(0x11,&wsaData);

    if(ret == SOCKET_ERROR)
    {   

        perror("failed to start up");
        return;

    }   


    SOCKET server;






}       


编译出来提示错误

1 error C2275: “SOCKET”: 将此类型用作表达式非法

1个回答

头文件没有包含进来。最前面两行include没写完整,漏掉了后面的头文件名称

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
windows下C语言编写socket出现连接失败,怎么解决
服务器: ``` #include<stdio.h> #include<errno.h> #include<WinSock2.h> #pragma comment (lib,"Ws2_32.lib") void printerro() { printf("erro %d :", errno); printf("%s\n", strerror(errno)); getchar(); } int main() { int binded, rec, listened; SOCKET sockser, sockcli; struct sockaddr_in seraddr; struct sockaddr_in cliaddr; WORD sockVersion = MAKEWORD(2, 2); WSADATA wsaData; if (WSAStartup(sockVersion, &wsaData) != 0) { return 0; } sockser = socket(AF_INET, SOCK_STREAM, 0); if (sockser == -1) { printf("socket erro\n"); printerro(); exit(1); } else printf("socket ok...\n"); seraddr.sin_family = AF_INET; seraddr.sin_port = htons(600); seraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); binded=bind(sockser, (struct sockaddr*)&seraddr, sizeof(seraddr)); if (binded == SOCKET_ERROR) { printf("binded erro\n"); printerro(); exit(1); } else printf("binded ok...\n"); listened = listen(sockser, 5); if (listened == SOCKET_ERROR) { printf("listen erro\n"); printerro(); exit(1); } else printf("listen ok...\n"); char str[100]; int len = sizeof(seraddr); while (1) { printf("waiting to link.....\n"); sockcli = accept(sockser, (struct sockaddr*)&cliaddr, &len); if (sockcli == INVALID_SOCKET) { printf("accept errp\n"); printerro(); continue; } else //printf("accepted=%d\n", sockcli); puts("连接成功...."); rec = recv(sockcli, str, 100, 0); printf("rec=%d\n", rec); puts(str); close(sockcli); } puts("OVER!\n"); getchar(); return 0; } ``` 客户端: ``` #include<stdio.h> #include<WinSock2.h> #include <errno.h> #pragma comment(lib,"ws2_32.lib") void printerro() { printf("erro %d :", errno); printf("%s\n", strerror(errno)); } int main() { WORD sockVersion = MAKEWORD(2, 2); WSADATA data; if (WSAStartup(sockVersion, &data) != 0) { return 0; } SOCKET sockcli; struct sockaddr_in addrser; sockcli = socket(AF_INET, SOCK_STREAM, 0); if (sockcli == -1) { printf("socket erro\n"); printerro(); exit(1); } else printf("socket ok...\n"); addrser.sin_family = AF_INET; addrser.sin_port = htons(600); addrser.sin_addr.S_un.S_addr = inet_addr("124.93.196.14"); if (connect(sockcli, (struct sockaddr*)&addrser, sizeof(addrser)) == SOCKET_ERROR) { printf("connect erro\n"); printerro(); } else printf("connect ok...\n"); char message[] = "hello !I am kehuduan."; if (send(sockcli, message, strlen(message) + 1, 0) == SOCKET_ERROR) { printf("send erro\n"); printerro(); } else printf("send ok..\n"); closesocket(sockcli); WSACleanup(); getchar(); return 0; } ``` 运行后结果为: (左侧为服务器,右侧为客户端) ![图片说明](https://img-ask.csdn.net/upload/201608/25/1472125587_428038.png) 请问各位,我这个哪里出错了。为什么?怎么解决?(注:我是用VS2015编译的)
mingw socket编程生成的可执行文件运行时崩溃
c语言写的socket程序,在vs2008里可以正常运行,但是通过mingw编译生成的可执行文件,在运行过程中会报错,关闭,makefile 链接了 -lws2_32
tracert程序编译成功运行后,无法正常发送接收包,输出结果只有123456789101112131415161718192021222324252627282930,不显示详细情况,单步运行后发现接收发送包的部分没执行
![图片说明](https://img-ask.csdn.net/upload/201911/30/1575117089_191288.jpg) #include <iostream> #include <winsock2.h> #include <ws2tcpip.h> using namespace std; #pragma comment(lib, "Ws2_32.lib") //IP报头 typedef struct IP_HEADER { unsigned char hdr_len:4; //4位头部长度 unsigned char version:4; //4位版本号 unsigned char tos; //8位服务类型 unsigned short total_len; //16位总长度 unsigned short identifier; //16位标识符 unsigned short frag_and_flags; //3位标志加13位片偏移 unsigned char ttl; //8位生存时间 unsigned char protocol; //8位上层协议号 unsigned short checksum; //16位校验和 unsigned long sourceIP; //32位源IP地址 unsigned long destIP; //32位目的IP地址 } IP_HEADER; //ICMP报头 typedef struct ICMP_HEADER { BYTE type; //8位类型字段 BYTE code; //8位代码字段 USHORT cksum; //16位校验和 USHORT id; //16位标识符 USHORT seq; //16位序列号 } ICMP_HEADER; //报文解码结构 typedef struct DECODE_RESULT { USHORT usSeqNo; //序列号 DWORD dwRoundTripTime; //往返时间 in_addr dwIPaddr; //返回报文的IP地址 }DECODE_RESULT; //计算网际校验和函数 USHORT checksum( USHORT *pBuf, int iSize ) { unsigned long cksum = 0; while( iSize > 1 ) { cksum += *pBuf++; iSize -= sizeof(USHORT); } if( iSize )//如果 iSize 为正,即为奇数个字节 { cksum += *(UCHAR *)pBuf; //则在末尾补上一个字节,使之有偶数个字节 } cksum = ( cksum >> 16 ) + ( cksum&0xffff ); cksum += ( cksum >> 16 ); return (USHORT)( ~cksum ); } //对数据包进行解码 BOOL DecodeIcmpResponse(char * pBuf, int iPacketSize, DECODE_RESULT &DecodeResult, BYTE ICMP_ECHO_REPLY, BYTE ICMP_TIMEOUT) { //检查数据报大小的合法性 IP_HEADER* pIpHdr = ( IP_HEADER* )pBuf; int iIpHdrLen = pIpHdr->hdr_len * 4; //ip报头的长度是以4字节为单位的 //若数据包大小 小于 IP报头 + ICMP报头,则数据报大小不合法 if ( iPacketSize < ( int )( iIpHdrLen + sizeof( ICMP_HEADER ) ) ) return FALSE; //根据ICMP报文类型提取ID字段和序列号字段 ICMP_HEADER *pIcmpHdr = ( ICMP_HEADER * )( pBuf + iIpHdrLen );//ICMP报头 = 接收到的缓冲数据 + IP报头 USHORT usID, usSquNo; if( pIcmpHdr->type == ICMP_ECHO_REPLY ) //ICMP回显应答报文 { usID = pIcmpHdr->id; //报文ID usSquNo = pIcmpHdr->seq; //报文序列号 } else if( pIcmpHdr->type == ICMP_TIMEOUT )//ICMP超时差错报文 { char * pInnerIpHdr = pBuf + iIpHdrLen + sizeof( ICMP_HEADER ); //载荷中的IP头 int iInnerIPHdrLen = ( ( IP_HEADER * )pInnerIpHdr )->hdr_len * 4; //载荷中的IP头长 ICMP_HEADER * pInnerIcmpHdr = ( ICMP_HEADER * )( pInnerIpHdr + iInnerIPHdrLen );//载荷中的ICMP头 usID = pInnerIcmpHdr->id; //报文ID usSquNo = pInnerIcmpHdr->seq; //序列号 } else { return false; } //检查ID和序列号以确定收到期待数据报 if( usID != ( USHORT )GetCurrentProcessId() || usSquNo != DecodeResult.usSeqNo ) { return false; } //记录IP地址并计算往返时间 DecodeResult.dwIPaddr.s_addr = pIpHdr->sourceIP; DecodeResult.dwRoundTripTime = GetTickCount() - DecodeResult.dwRoundTripTime; //处理正确收到的ICMP数据报 if ( pIcmpHdr->type == ICMP_ECHO_REPLY || pIcmpHdr->type == ICMP_TIMEOUT ) { //输出往返时间信息 if(DecodeResult.dwRoundTripTime) cout<<" "<<DecodeResult.dwRoundTripTime<<"ms"<<flush; else cout<<" "<<"<1ms"<<flush; } return true; } void main() { //初始化Windows sockets网络环境 WSADATA wsa; WSAStartup( MAKEWORD(2,2), &wsa ); char IpAddress[255]; cout<<"请输入一个IP地址或域名:"; cin>>IpAddress; //得到IP地址 u_long ulDestIP = inet_addr( IpAddress ); //转换不成功时按域名解析 if( ulDestIP == INADDR_NONE ) { hostent * pHostent = gethostbyname( IpAddress ); if( pHostent ) { ulDestIP = ( *( in_addr* )pHostent->h_addr).s_addr; } else { cout<<"输入的IP地址或域名无效!"<<endl; WSACleanup(); return; } } cout<<"Tracing roote to "<<IpAddress<<" with a maximum of 30 hops.\n"<<endl; //填充目的端socket地址 sockaddr_in destSockAddr; ZeroMemory( &destSockAddr, sizeof( sockaddr_in ) ); destSockAddr.sin_family = AF_INET; destSockAddr.sin_addr.s_addr = ulDestIP; //创建原始套接字 SOCKET sockRaw = WSASocket( AF_INET, SOCK_RAW, IPPROTO_ICMP, NULL, 0, WSA_FLAG_OVERLAPPED ); //超时时间 int iTimeout = 3000; //设置接收超时时间 setsockopt( sockRaw, SOL_SOCKET, SO_RCVTIMEO, (char *)&iTimeout, sizeof( iTimeout ) ); //设置发送超时时间 setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char *)&iTimeout,sizeof(iTimeout)); //构造ICMP回显请求消息,并以TTL递增的顺序发送报文 //ICMP类型字段 const BYTE ICMP_ECHO_REQUEST = 8; //请求回显 const BYTE ICMP_ECHO_REPLY = 0; //回显应答 const BYTE ICMP_TIMEOUT = 11; //传输超时 //其他常量定义 const int DEF_ICMP_DATA_SIZE = 32; //ICMP报文默认数据字段长度 const int MAX_ICMP_PACKET_SIZE = 1024; //ICMP报文最大长度(包括报头) const DWORD DEF_ICMP_TIMEOUT = 3000; //回显应答超时时间 const int DEF_MAX_HOP = 30; //最大跳站数 //填充ICMP报文中每次发送时不变的字段 char IcmpSendBuf[ sizeof( ICMP_HEADER ) + DEF_ICMP_DATA_SIZE ];//发送缓冲区 memset( IcmpSendBuf, 0, sizeof( IcmpSendBuf ) ); //初始化发送缓冲区 char IcmpRecvBuf[ MAX_ICMP_PACKET_SIZE ]; //接收缓冲区 memset( IcmpRecvBuf, 0, sizeof( IcmpRecvBuf ) ); //初始化接收缓冲区 ICMP_HEADER * pIcmpHeader = ( ICMP_HEADER* )IcmpSendBuf; pIcmpHeader->type = ICMP_ECHO_REQUEST; //类型为请求回显 pIcmpHeader->code = 0; //代码字段为0 pIcmpHeader->id = (USHORT)GetCurrentProcessId(); //ID字段为当前进程号 memset( IcmpSendBuf + sizeof( ICMP_HEADER ), 'E', DEF_ICMP_DATA_SIZE );//数据字段 USHORT usSeqNo = 0; //ICMP报文序列号 int iTTL = 1; //TTL初始值为1 BOOL bReachDestHost = FALSE; //循环退出标志 int iMaxHot = DEF_MAX_HOP; //循环的最大次数 DECODE_RESULT DecodeResult; //传递给报文解码函数的结构化参数 while( !bReachDestHost && iMaxHot-- ) { //设置IP报头的TTL字段 setsockopt( sockRaw, IPPROTO_IP, IP_TTL, (char *)&iTTL, sizeof(iTTL) ); cout<<iTTL<<flush; //输出当前序号,flush表示将缓冲区的内容马上送进cout,把输出缓冲区刷新 //填充ICMP报文中每次发送变化的字段 ((ICMP_HEADER *)IcmpSendBuf)->cksum = 0; //校验和先置为0 ((ICMP_HEADER *)IcmpSendBuf)->seq = htons(usSeqNo++); //填充序列号 ((ICMP_HEADER *)IcmpSendBuf)->cksum = checksum( ( USHORT * )IcmpSendBuf, sizeof( ICMP_HEADER ) + DEF_ICMP_DATA_SIZE ); //计算校验和 //记录序列号和当前时间 DecodeResult.usSeqNo = ( ( ICMP_HEADER* )IcmpSendBuf )->seq; //当前序号 DecodeResult.dwRoundTripTime = GetTickCount(); //当前时间 //发送TCP回显请求信息 sendto( sockRaw, IcmpSendBuf, sizeof(IcmpSendBuf), 0, (sockaddr*)&destSockAddr, sizeof(destSockAddr) ); //接收ICMP差错报文并进行解析处理 sockaddr_in from; //对端socket地址 int iFromLen = sizeof(from);//地址结构大小 int iReadDataLen; //接收数据长度 while(1) { //接收数据 iReadDataLen = recvfrom( sockRaw, IcmpRecvBuf, MAX_ICMP_PACKET_SIZE, 0, (sockaddr*)&from, &iFromLen ); if( iReadDataLen != SOCKET_ERROR )//有数据到达 { //对数据包进行解码 if(DecodeIcmpResponse( IcmpRecvBuf, iReadDataLen, DecodeResult, ICMP_ECHO_REPLY, ICMP_TIMEOUT ) ) { //到达目的地,退出循环 if( DecodeResult.dwIPaddr.s_addr == destSockAddr.sin_addr.s_addr ) bReachDestHost = true; //输出IP地址 cout<<'\t'<<inet_ntoa( DecodeResult.dwIPaddr )<<endl; break; } } else if( WSAGetLastError() == WSAETIMEDOUT ) //接收超时,输出*号 { cout<<" *"<<'\t'<<"Request timed out."<<endl; break; } else { break; } } iTTL++; //递增TTL值 } }
c语言正则表达式抓取网站的<title>
本程序的功能是搜索网站的<title>字段的值 遗憾的是并不通用:ps:我也不知道为什么失败 问题1:正则表达式或运算消除标签大小写后匹配不到字符串 问题2:正则表达式实现零宽断言后发现匹配不到字符串 问题3:在科大官网上测试<title>成功 在其他网站可能会失败 ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <netdb.h> #include <netinet/in.h> #include <arpa/inet.h> #include <regex.h>//正则表达式 #define BUF_SIZE 512 int reptile_regex(char * buf); char ch[100000]; int main(int argc,char *argv[]) { struct sockaddr_in servAddr; struct hostent * host; int sockfd; char sendBuf[BUF_SIZE],recvBuf[BUF_SIZE]; int sendSize,recvSize; host=gethostbyname(argv[1]); if(host==NULL) { perror("dns 解析失败"); } servAddr.sin_family=AF_INET; servAddr.sin_addr=*((struct in_addr *)host->h_addr); servAddr.sin_port=htons(atoi(argv[2])); bzero(&(servAddr.sin_zero),8); sockfd=socket(AF_INET,SOCK_STREAM,0); if(sockfd==-1) { perror("socket 创建失败"); } if(connect(sockfd,(struct sockaddr *)&servAddr,sizeof(struct sockaddr_in))==-1) { perror("connect 失败"); } //构建一个http请求 sprintf(sendBuf,"GET / HTTP/1.1\r\nHost: %s\r\nConnection: keep-alive\r\n\r\n",argv[1]); if((sendSize=send(sockfd,sendBuf,BUF_SIZE,0))==-1) { perror("send 失败"); } //获取http应答信息 memset(recvBuf,0,sizeof(recvBuf)); memset(ch,0,sizeof(ch)); char pattern[128]={0}; while(recvSize=recv(sockfd,recvBuf,BUF_SIZE,0)>0) { //printf("%s",recvBuf); strcat(ch,recvBuf); memset(recvBuf,0,sizeof(recvBuf)); } reptile_regex(ch); return 0; } //第一个参数是要匹配的字符串,第二个参数是匹配的规则,返回匹配的个数 int reptile_regex(char* buf) { const char* pattern="<TITLE>.*<\\/TITLE>"; int cflags= REG_EXTENDED; const size_t nmatch=10;//结构体数组长度 regmatch_t pm[10];//结构体数组 存放匹配文本串的位置信息 regex_t reg;//正则表达式指针 char* str; str=buf;//str目标字符串 regcomp(&reg,pattern,0);//编译匹配模式 while(regexec(&reg,str,nmatch,pm,0)==0) { for(int j=pm[0].rm_so;j<pm[0].rm_eo;++j) { printf("%c",str[j]); } printf("\n"); str=str+pm[0].rm_eo; } regfree(&reg); return 0; } ```
C语言有关strstr()的问题
代码如下,在VC++6.0中编译连接都没问题,就是在遍历txt文件用strstr函数时会出现问题,直接停止运行,求大神指点!!!万分感谢!!!! ``` //#include <windows.h> #include <winsock2.h> #include <stdio.h> #include <string.h> #define SERVER_PORT 5432 #define MAX_PENDING 5 #define MAX_LINE 256 #define true 1 #define false 0 #pragma comment(lib,"ws2_32.lib") int main() { WSADATA WSAData; int WSAreturn; /* server address */ struct sockaddr_in sin; struct sockaddr_in remote; char buf[MAX_LINE]; int len; int s, new_s; char line[MAX_LINE]; //读取到的每一行 FILE *fp; /*文件指针*/ //char ans[MAX_LINE]; //bool flag; char * b; //int l; WSAreturn = WSAStartup(0x101,&WSAData); if(WSAreturn) { fprintf(stderr, "simplex-talk: WSA error.\n"); //格式化输出至出错文件stderr exit(1); } /* build address data structure */ memset((char *)&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(SERVER_PORT); //服务器端在listen之前会调用bind(),而客户端就不用调用,在connect()时由系统随机生成一个。 /* setup passive open */ if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) {//socket函数创建一个socket描述符(socket descriptor),它唯一标识一个socket。 perror("simplex-talk: socket failed."); // s 为socket描述字 exit(1); } if ((bind(s, (struct sockaddr *)&sin, sizeof(sin))) < 0) {//bind函数把一个地址族中的特定地址赋给socket perror("simplex-talk: bind failed."); //sin 一个const struct sockaddr *指针,指向要绑定给s的协议地址 exit(1); //sizeof(sin) 地址长度 } printf("server is ready in listening ...\n"); //服务器监听socket,客户端这时调用connect()发出连接请求,服务器端就会接收到这个请求。 listen(s, MAX_PENDING); /* wait for connection, then receive and print text */ while(1) { len = sizeof(struct sockaddr_in); if ((new_s = accept(s, (struct sockaddr *)&remote, &len)) < 0){ //服务器用accept接收客户端的连接请求 perror("simplex-talk: accept failed."); //服务器与客户已经建立连接, //可以调用网络I/O进行读写操作了,即实现了网咯中不同进程之间的通信. exit(1); } //printf("received a connection from %s : \n", inet_ntoa(remote.sin_addr)); while (len = recv(new_s, buf, sizeof(buf), 0)) { //int recv( SOCKET s, char FAR *buf, int len, int flags); //printf("received %2d chars:", len); //第一个参数指定 接收端套接字描述符 即s; printf("客户端: "); fputs(buf, stdout); //第二个参数指明一个缓冲区用来存放recv函数接收到的数据; //fputs将该字符串写入文件stdout,但并不写入结尾的'\0'。 //第三个参数指明buf的参数 第四个参数一般置0。 //在datafile中遍历得出答案,并放入缓冲区。 //strcpy(buf,reply(buf)); fp = fopen("C:\\Users\\user\\Desktop\\chatfile.txt","r") if(fp == NULL) { perror("打开失败!"); exit(1); } int l=strlen(buf); // bool flag; //char * b; while(fgets(line,sizeof(line),fp)) { if(!strstr(line,buf)){ //flag = false; //printf("测试"); } else{ // flag = true; if(line[l]==' '||line[l]==' '){ b=strstr(line," "); break; } else{ //flag = false; } } }//while fclose(fp); /*if(flag==false){ char reply[]={"服务器:我听不懂您的意思。"}; puts(reply); int lens; lens = strlen(reply); send(new_s,reply,lens,0); } else{*/ printf("服务器:"); puts(b); printf("\n"); char * ans=b; int lens; lens = strlen(ans); send(new_s,ans,lens,0); } } closesocket(new_s); //关闭连接 //} WSACleanup(); return 0; } ```
编译ss5时出错Makefile:32: recipe for target 'ss5' failed
没什么c币奖励。。。 系统:Fedora23x64 gcc环境安装好了 执行./configure时没报错(我看来) ``` checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for a BSD-compatible install... /usr/bin/install -c checking for main in -ldl... yes checking for main in -lldap... yes checking for main in -lpam... yes checking for main in -lpam_misc... yes checking for main in -lpthread... yes checking for main in -lssl... yes checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... yes checking for sys/wait.h that is POSIX.1 compatible... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking arpa/inet.h usability... yes checking arpa/inet.h presence... yes checking for arpa/inet.h... yes checking fcntl.h usability... yes checking fcntl.h presence... yes checking for fcntl.h... yes checking netdb.h usability... yes checking netdb.h presence... yes checking for netdb.h... yes checking netinet/in.h usability... yes checking netinet/in.h presence... yes checking for netinet/in.h... yes checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking sys/ioctl.h usability... yes checking sys/ioctl.h presence... yes checking for sys/ioctl.h... yes checking sys/socket.h usability... yes checking sys/socket.h presence... yes checking for sys/socket.h... yes checking sys/time.h usability... yes checking sys/time.h presence... yes checking for sys/time.h... yes checking syslog.h usability... yes checking syslog.h presence... yes checking for syslog.h... yes checking for unistd.h... (cached) yes checking security/pam_misc.h usability... yes checking security/pam_misc.h presence... yes checking for security/pam_misc.h... yes checking security/pam_appl.h usability... yes checking security/pam_appl.h presence... yes checking for security/pam_appl.h... yes checking for an ANSI C-conforming const... yes checking for inline... inline checking for pid_t... yes checking whether time.h and sys/time.h may both be included... yes checking vfork.h usability... no checking vfork.h presence... no checking for vfork.h... no checking for fork... yes checking for vfork... yes checking for working fork... yes checking for working vfork... (cached) yes checking whether gcc needs -traditional... no checking for stdlib.h... (cached) yes checking for GNU libc compatible realloc... yes checking sys/select.h usability... yes checking sys/select.h presence... yes checking for sys/select.h... yes checking for sys/socket.h... (cached) yes checking types of arguments for select... int,fd_set *,struct timeval * checking for strftime... yes checking for bzero... yes checking for gethostbyname... yes checking for gettimeofday... yes checking for inet_ntoa... yes checking for memset... yes checking for select... yes checking for socket... yes checking for strdup... yes checking for strtol... yes configure: creating ./config.status config.status: creating Makefile config.status: creating modules/Makefile config.status: creating modules/mod_authen/Makefile config.status: creating modules/mod_author/Makefile config.status: creating modules/mod_balance/Makefile config.status: creating modules/mod_bandwidth/Makefile config.status: creating modules/mod_dump/Makefile config.status: creating modules/mod_filter/Makefile config.status: creating modules/mod_log/Makefile config.status: creating modules/mod_proxy/Makefile config.status: creating modules/mod_socks4/Makefile config.status: creating modules/mod_socks5/Makefile config.status: creating modules/mod_statistics/Makefile config.status: creating common/Makefile config.status: creating src/Makefile config.status: creating include/config.h config.status: include/config.h is unchanged ``` 但是make就报错了 ``` collect2: error: ld returned 1 exit status Makefile:32: recipe for target 'ss5' failed make[1]: *** [ss5] Error 1 make[1]: Leaving directory '/root/ss5-3.8.9/src' Makefile:31: recipe for target 'src' failed make: *** [src] Error 2 ``` 不知道我们是,求da'l
需要制作一个tcp计算器,客户端出了问题
1.不删除 下面这段代码的话,会出错. if (argc !=2){ //number of parameters wrong perror("Input: ./server12 <IP address of the server> to use"); exit(1); } 2.删除了之后,可以编译但运行的时候会提示Segmentation fault (core dumped); 3.修改了 servaddr.sin_addr.s_addr= inet_addr(argv[1]);改为htonl(INADDR_ANY),2的错误已经解决,但是网络连接失败..Fail to connect to the server: Connection refused #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> #include <arpa/inet.h> #include <unistd.h> #define MAXLINE 1024 #define SERV_PORT 10010 int main(int argc, char **argv) {/ int sockfd; struct sockaddr_in servaddr; char recvmsg[MAXLINE]; unsigned num1, num2, result; char operator, valid; char str1[] = "Valid", str2[] = "Invalid", valid_s[10]; char sendmsg[MAXLINE]; if (argc !=2){ perror("Input: ./server12 <IP address of the server> to use"); exit(1); } if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) <0){ perror("Socket initialize failed"); exit(2); } memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr= inet_addr(argv[1]);/ servaddr.sin_port = htons(SERV_PORT); if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr))<0){ perror("Problem in connecting to the server"); exit(3); } while(1){ printf("%s\n", "Please enter the first integer"); while (scanf("%u", &num1) != 1){ while(getchar() != '\n'); printf("%s\n", "Input type illegal"); printf("%s\n", "Please enter the first integer again"); } while(getchar() != '\n'); // get operation printf("%s\n", "Please enter the operation "); while((scanf("%c", &operator)!= 0) && (operator !=43 &&operator != 45 && operator!= 120 && operator!=47)){ while(getchar() != '\n'); printf("%s\n", "Operator is illegal or does not exist"); printf("%s\n", "Please check the input"); } while(getchar() != '\n'); // get the second number to operate printf("%s\n", "Please enter the second integer"); while (scanf("%u", &num2) != 1){//check input type while(getchar() != '\n'); printf("%s\n", "Input type illegal"); printf("%s\n", "Please enter the second integer again"); } while(getchar() != '\n'); memcpy(sendmsg, &operator, 1); memcpy(sendmsg + 1, &num1, 4); memcpy(sendmsg + 5, &num2, 4); //send message send(sockfd, sendmsg, MAXLINE, 0); printf("Message sent to the server: %u %c %u\n", num1, operator, num2); if (recv(sockfd, recvmsg, MAXLINE,0) == 0){ perror("The server has terminated "); exit(4); }else{ memcpy(&result, recvmsg + 9, 4); valid = recvmsg[13]; if(valid == '1'){//success strncpy(valid_s, str1, sizeof(str1)); }else//failed { strncpy(valid_s, str2, sizeof(str2)); } printf("Result: %u %c %u = %d, %s.\n", num1, operator, num2, result, valid_s);//print the result } } exit(0); }
VS2017+WIN10,程序运行过程中,返回值正确,但是依然会进入错误处理代码块中,求解?
之前一直在win7平台做开发,因为项目需要,把代码转到win10上运行,发现有错误. 于是自己装了一台win10在本地调试代码,发现一个奇怪的问题. 代码如下: for (size_t i = 0; i < n重连次数; i++) { Sleep(1000); LONG retSend = Send(sock, &bufInfo); if (retSend <= 0) { g_Client.Connect(g_strIP, g_nPort); sock = g_Client.m_Socket; continue; } break; } 就是这么简单的一段代码,在win7平台调试和生成运行都没有问题,但是放在win10就出问题. 返回值 retSend 接收的是发送数据的长度. 我在win10环境下 下个断点,断点位置在LONG retSend = Send(sock, &bufInfo);这段代码处, 发现当Send函数执行完毕后,retSend接收的结果依然是0,(哪怕数据发送成功,并且长度是100,并且正确返回,但是retSend在断点位置,以及断点F10向下走下一条,依然是0) 接着断点走入 if (retSend <= 0) 代码块里面, 奇怪的现象出现了,如果说retSend的结果是0,那么继续向下走,也就罢了, 最关键的是,它在这里突然又变成了正确的值,比如retSend=100了. 程序本来在这个代码块中运行这,结果没有走到结尾,突然就又跳了回去 也就是说直接走到break;这里,跳出循环了. 这个问题困扰我两天了,在这里跪求大神解答. 这段代码在win7环境下测试几年都没有问题的,但是在win10就是不行,不知道是编译器原因还是win10做了某些优化 Send(sock, &bufInfo);此函数是自己封装的发包函数,里面有一些数据压缩加密,然后就是调用send将数据发送出去. 在Send()里面,返回值是正确的,但是在这段代码中,retSend接收到的结果却没有即时被复制,直到进入错误处理代码块中突然变好又跳了出去. 如果没有下调试断点,那么它就不会break,一直在错误处理代码中循环完毕才结束.
QT程序出现connect: Cannot connect (null)::readyRead()是什么问题。。。?
qt编译一个服务端程序,编译通过,从编译器run能正常启动, 服务端监听开始后,当客户端接入,输出窗口提示QObject::connect: Cannot connect (null)::readyRead() to TCPServer::recvData();![图片说明](https://img-ask.csdn.net/upload/201904/11/1554966053_830635.png)发送消息会奔溃![图片说明](https://img-ask.csdn.net/upload/201904/11/1554966367_68450.png) 我第一次运行这两个程序能够运行,消息互通,没有任何问题。几次后一发消息就提示奔溃。 后来我又把服务端跟客户端两个exe单独放到空文件夹里,用windeployqt.exe打包库文件那些,运行,开始几次也能正常通信,后来又开始奔溃。 输出窗口提示无法连接了。下面源码。 ``` #ifndef TCPSERVER_H #define TCPSERVER_H #include <QWidget> #include <QTcpServer> #include <QTcpSocket> namespace Ui { class TCPServer; } class TCPServer : public QWidget { Q_OBJECT public: explicit TCPServer(QWidget *parent = 0); ~TCPServer(); private: Ui::TCPServer *ui; QTcpServer *server; QTcpSocket *socket; public slots: void startServer(); void sendMsg(); void connetserver(); void recvData(); }; #endif // TCPSERVER_H ------------------------.CPP----------------------------- #include "tcpserver.h" #include "ui_tcpserver.h" const quint16 port=6666; TCPServer::TCPServer(QWidget *parent) : QWidget(parent), ui(new Ui::TCPServer) { ui->setupUi(this); server=new QTcpServer(this); connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(startServer())); connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(sendMsg())); } TCPServer::~TCPServer() { delete ui; } void TCPServer::startServer(){ server->listen(QHostAddress::Any,port); connect(server,SIGNAL(newConnection()),this,SLOT(connetserver())); } void TCPServer::connetserver(){ //获取客户端 socket=server->nextPendingConnection(); connect(socket,SIGNAL(readyRead()),this,SLOT(recvData())); } void TCPServer::recvData(){ QByteArray array=socket->readAll(); if(!array.isEmpty()){ ui->textEdit->append(QString::fromLocal8Bit(array)); } } void TCPServer::sendMsg(){ QString str=ui->textEdit_2->toPlainText(); socket->write(str.toLocal8Bit()); socket->flush(); } ```
字符编码的相关知识联想到本地二进制代码困惑
最近在看字符编码的相关知识,又联想到二进制代码的知识,由于本人不是科班出身,对一些二进制代码即本地代码了解不深,所以有几个问题感到很困惑,所以希望懂相关知识的人帮我顺一顺。 VS默认是将文本本件(包括cs文件)以utf-8编码方案编码成字节的,举个例子 我们AaBb经过utf-8编码后是E6 88 91 E4 BB AC 41 61 42 62 E6 88 91(代表我) E4 BB AC(代表们) 41(A) 61(a) 42(B) 62(b) [color=red]第一个问题:[/color]我是不是可以认为将这些16进制转换成2进制后就是 我们AaBb 在计算机的存储方式? 如下 11100110 10001000 10010001(代表我) 11100100 10111011 10101100(代表们) 1000001(A) 1100001(b) 1000010(B) 1100010(b) 如果换成是utf-16编码的 Little_Edian方式(每个字符占2个字节) 就是 11 62(代表我) EC 4E(代表们) 41 00(A) 61 00(a) 42 00(B) 62 00(b) 既然说到了2进制,我就想起了本地代码,从开始学语言的时候就看到各种各样的人说机器语言是01010这种2进制云云... 那么对于C# java先看一下下面 源代码 C#,java ↓ 托管代码 .NET:IL(中间语言) JAVA:字节码等 ↓ 非托管代码(本地代码,二进制代码,机器语言)http://baike.baidu.com/view/2418160.htm 首先看源代码,如果我们只是保存它们,当然就是像上面那样用某种编码方式将其保存成字节 [color=red]第2个问题:[/color]如果我们对源代码进行了编译,使其变成了托管代码,windows下的托管代码叫做可移植执行体,那么这些托管代码肯定也是以2进制形式存储在硬盘里,那么这时的我们编译得来2进制形式与我们直接保存得来的2进制形式的区别在哪里? [color=red]第3个问题:[/color]当将托管代码编译成本地代码后,啊哈,这就是人们常说的本地2进制代码,这些本地2进制代码与之前的托管2进制代码的区别在哪里? 我知道后者要依赖CLR或jvm,但除此之外呢? 看了上面的提问,感觉我要问的好像是编译的得到的2进制代码与编码得到的2进制代码有什么区别,然后是编译源代码得到的2进制代码与编译托管代码得到的2进制代码有什么区别。 [color=red]第4个问题:[/color]既然编码字符需要考虑编码方案的问题,那么图片视频呢? 就拿.net中socket传输字符串来讲也是需要考虑编码方案的,为什么传输图片就不需要考虑编码呢? 图片不是也有jpg gif等好多格式吗?
相见恨晚的超实用网站
相见恨晚的超实用网站 持续更新中。。。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
JavaScript 为什么能活到现在?
作者 | 司徒正美 责编 |郭芮 出品 | CSDN(ID:CSDNnews) JavaScript能发展到现在的程度已经经历不少的坎坷,早产带来的某些缺陷是永久性的,因此浏览器才有禁用JavaScript的选项。甚至在jQuery时代有人问出这样的问题,jQuery与JavaScript哪个快?在Babel.js出来之前,发明一门全新的语言代码代替JavaScript...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
实战:如何通过python requests库写一个抓取小网站图片的小爬虫
有点爱好的你,偶尔应该会看点图片文字,最近小网站经常崩溃消失,不如想一个办法本地化吧,把小照片珍藏起来! 首先,准备一个珍藏的小网站,然后就可以开始啦! 第一步 我们先写一个获取网站的url的链接,因为url常常是由page或者,其他元素构成,我们就把他分离出来,我找到的网站主页下有图片区 图片区内有标题页,一个标题里有10张照片大概 所以步骤是: 第一步:进入图片区的标题页 def getH...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
金山办公上市,雷军心愿了却!
作者 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 11月17日,大周末的,雷军微博发了个重磅消息: “明天将是里程碑式的一天,金山办公终于成功在科创板挂牌上市了! 从1988年金山创办到今天,WPS走了整整31年。 从1999年以金山办公为主体准备上市算起,这一天,我们等了20年。 WPS和金山的历程,这是一个坚持梦想并最终取得胜利的励志故事。期待大家的祝福!”...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
碎片化的时代,如何学习
今天周末,和大家聊聊学习这件事情。 在如今这个社会,我们的时间被各类 APP 撕的粉碎。 刷知乎、刷微博、刷朋友圈; 看论坛、看博客、看公号; 等等形形色色的信息和知识获取方式一个都不错过。 貌似学了很多,但是却感觉没什么用。 要解决上面这些问题,首先要分清楚一点,什么是信息,什么是知识。 那什么是信息呢? 你一切听到的、看到的,都是信息,比如微博上的明星出轨、微信中的表情大战、抖音上的...
腾讯“疯狂”开源!
作者 | 马超 责编 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 近日,腾讯自研的万亿级分布式消息中间件TubeMQ正式开源,并捐赠给Apache基金会,成为基金会官方认可的Incubator项目。 我们知道与TubeMQ功能类似的kafka是领英公司在早在10年前捐赠给Apache基金会的金牌项目,而那时的腾讯还在忙于3Q大战,公司文化也相对封闭,甚至连目前社交领...
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。 背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法 不过,当我看了源代码之后 这程序不到50行 尽管我有多年的Python经验,但我竟然一时也没有看懂 当然啦,原作者也说了,这个代码也是在无聊中诞生的,平时撸码是不写中文变量名的, 中文...
相关热词 c# 二进制截断字符串 c#实现窗体设计器 c#检测是否为微信 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片
立即提问