C#Socket编程,能实现客户端发送一个txt文件即可,怎么写?

C#Socket编程,只写客户端(127.0.0.1:5555),能实现发送一个txt文件到服务器,文件目录可以直接指定,怎么写呢?大神们?

5个回答

只写客户端肯定是不行的,因为文件传输一般需要额外的信息在服务器才能完成文件的恢复:
1)文件名,当然这个可以在服务端重起名。但这样就不好和客户端对应的了!
2)文件在客户端传输时需要分包,所以在服务器端需要和包。
3)传输过程一般为了防止数据错误,会有 CRC。
等等,这些都需要客户端与服务器端一起处理。

yuxiaoxia28
yuxiaoxia28 谢谢,恩,是还有很多问题需要考虑。
4 年多之前 回复

光写客户端,这个说法很扯淡。必须要写服务器端。除非你的服务器端使用标准的协议,比如http。那也没必要用socket了。
用webclient.uploadfile,一行代码就行了。
服务器IIS开一个网站,接收文件,监听5555

yuxiaoxia28
yuxiaoxia28 回复yuxiaoxia28: 打错字了,不然是没法通信。。。
4 年多之前 回复
yuxiaoxia28
yuxiaoxia28 谢谢你,我知道的肯定要写服务器,不要是没法通信的,这是我的作业来着,我主要是想问怎么写客户端,我在试试的
4 年多之前 回复
yuxiaoxia28
yuxiaoxia28 谢谢,要考试,我好好看看
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于C#socket编程的一个小问题,欢迎大神来解答
需求描述: 使用C#开发一个服务端使用的是wpf项目,该服务端为手机客户端提供不同的访问URL,根据手机端访问服务器所使用的URL不同做出不同的回应,当然什么URL做出什么回应是由协商好的API决定的。 问题描述: 问题一:如何提供可以访问服务器同一端口的不同URL???我该怎么监听? 问题二:当有连接请求的时候我怎么指导手机端是使用了什么URL访问的??我能获取到URL吗?用什么方法? 问题三:以上问题解决方案能够在socket编程中解决吗?
求大神来解答啊,关于C#socket编程的问题
需求描述: 使用C#开发一个服务端使用的是wpf项目,该服务端为手机客户端提供不同的访问URL,根据手机端访问服务器所使用的URL不同做出不同的回应,当然什么URL做出什么回应是由协商好的API决定的。 问题描述: 问题一:如何提供可以访问服务器同一端口的不同URL???我该怎么监听? 问题二:当有连接请求的时候我怎么指导手机端是使用了什么URL访问的??我能获取到URL吗?用什么方法? 问题三:以上问题解决方案能够在socket编程中解决吗?
求助,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# 多客户端跨网段通信
我的问题是这样的: 用C #编写上位机(服务端)与多个模块(客户端)在不同网段(多个路由连接 )进行通信,并要求服务端设置客户端网关和地址。怎么使用Socket编程?希望能请教个位大侠,谢谢!
Java与C#用socket通讯 只求发送数据部分和数据接收部分(发送简单的文本信息)
只求发送数据部分和数据接收部分 TCP连接不要 客户端和服务器响应次数也不要 只求发送数据部分和数据接收部分(java发送c#接收)
linux 下socket编程,客户端连接服务器失败
最近因为课程需要学习socket网络编程,运行的时候客户端无法与服务器建立连接,请原谅菜鸟没有积分,希望各位大佬给点帮助,解决下问题 这个是运行报错的截图 ![图片说明](https://img-ask.csdn.net/upload/201910/26/1572069361_597125.png) 以下是按照课本上编写的代码 客户端client.c ``` #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #define PROTOPORT 5188 extern int errno; char localhost[] = "localhost"; int main(int argc, char* argv[]) { struct hostent *ptrh; struct sockaddr_in servaddr; int sockfd; int port; char* host; int n; char buf[1000]; memset((char*)&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; if(argc > 2){ port = atoi(argv[2]); }else{ port = PROTOPORT; } if(port > 0){ servaddr.sin_port = htons((uint16_t)port); }else{ fprintf(stderr, " bad port number %s\n", argv[2]); exit(1); } if(argc > 1){ host = argv[1]; }else{ host = localhost; } ptrh = gethostbyname(host); if((char*)ptrh == NULL){ fprintf(stderr, " invalid host: %s\n", host); exit(1); } memcpy(&servaddr.sin_addr, ptrh->h_addr_list[0], ptrh->h_length); sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd > 0){ fprintf(stderr, " socket creation failed\n"); exit(1); } //请求连接到服务器 if(connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr))){ fprintf(stderr, "connect failed\n"); exit(1); } //从服务器读取数据,显示到用户屏幕上 n = recv(sockfd, buf, sizeof(buf), 0); while(n > 0){ write(1, buf, n); n = recv(sockfd, buf, sizeof(buf), 0); } //关闭连接 close(sockfd); //退出 exit(0); return 0; } ``` 服务器端server.c ``` #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <string.h> #include <netinet/in.h> #include <netdb.h> #include <stdlib.h> #include <unistd.h> #define PROTOPORT 5188 #define QLEN 6 int visits = 0; int main(int argc, char * argv[]) { struct sockaddr_in servaddr; //存放服务器网络地址结构 struct sockaddr_in clientaddr; //存放客户机网络地址结构 int listenfd; int clientfd; int port; int alen; char buf[1000]; memset((char*)& servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = INADDR_ANY; if(argc >1){ port = atoi(argv[1]); }else{ port = PROTOPORT; } if(port > 0){ servaddr.sin_port = htons((uint16_t)port); }else{ fprintf(stderr, " bad port nuber %s\n", argv[1]); exit(1); } listenfd = socket(AF_INET, SOCK_STREAM, 0); if(listenfd < 0){ fprintf(stderr, "socket creation failed\n"); exit(1); } if(bind(listenfd, (struct sockaddr*) & servaddr, sizeof(servaddr)) < 0){ fprintf(stderr, " bind failed\n"); exit(1); } if(listen(listenfd, QLEN) < 0){ fprintf(stderr, "listen filed\n"); exit(0); } while(1) { alen = sizeof(clientaddr); if((clientfd = accept(listenfd, (struct sockaddr*) & clientaddr, (socklen_t*)&alen)) < 0){ fprintf(stderr, "accept failed\n"); exit(1); } visits++; sprintf(buf, "this server has been contacted %d time \n", visits); send(clientfd, buf, strlen(buf), 0); close(clientfd); } return 0; } ```
c++的socket编程,无客户端连接accept却不阻塞,直接返回了,怎么解决
以下是服务端的代码: ``` #include "stdafx.h" #include "winsock2.h" #include "iostream" #pragma comment (lib,"ws2_32") using namespace std; int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsadata; WSAStartup(MAKEWORD(2, 2), &wsadata); cout << "开始创建套接字\n"; SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); struct sockaddr_in saddrin; saddrin.sin_addr.S_un.S_addr = inet_addr("INADDR_ANY"); saddrin.sin_port = htons(9100); cout << "开始绑定\n"; bind(s, (sockaddr *)&saddrin, sizeof(saddrin)); cout << "开始监听\n"; listen(s, SOMAXCONN); struct sockaddr_in sClient; int num = sizeof(sClient); SOCKET client= accept(s, (sockaddr *)&sClient, &num); if (client) { cout << "已接受来自客户端的连接\n"; cout << sClient.sin_port<<'\n'; cout<< inet_ntoa(sClient.sin_addr)<<'\n'; char msg[MAXBYTE] = { 0 }; recv(client, msg, sizeof(msg), 0); cout << msg; strcpy_s(msg, "this is a reply for the test\n"); send(client, msg, strlen(msg) + sizeof(char), 0); cout << "已发送消息\n"; } else { cout << "无客户端的连接"; } system("PAUSE"); return 0; } ``` 运行结果如下: ![图片说明](https://img-ask.csdn.net/upload/201603/05/1457150555_147664.png) 启动了服务端,客户端都没启动,就直接执行完返回了,accept那里不是应该阻塞,等待客户端的连接的吗?即使同时启动客户端和服务端也是这样的结果,请问应该怎么解决?
c# 做TCP服务器端接受数据时无法获取发送的数据,当客户端断连后数据才上传
private void Listen() { Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listener.Bind(new IPEndPoint(serverIP, 3588)); //不断监听端口 while (true) { listener.Listen(1); Socket socket = listener.Accept();//监听到连接 //Socket socket = listener.BeginAccecpt(new AsyncCallback(Accept), listener); //listener.BeginAccept(new AsyncCallback(AcceptCallBack), listener);//监听连接状态 //while(true) //{ // NetworkStream ntwStream = new NetworkStream(socket); // StreamReader strmReader = new StreamReader(ntwStream); // Invoke(new PrintRecvMssgDelegate(PrintRecvMssg), // new object[] { strmReader.ReadToEnd() }); // listener.Listen(1); // socket = listener.Accept(); //} NetworkStream ntwStream = new NetworkStream(socket);//监听到连接 StreamReader strmReader = new StreamReader(ntwStream); Invoke(new PrintRecvMssgDelegate(PrintRecvMssg), new object[] { strmReader.ReadToEnd() }); socket.Close(); //MessageBox.Show("11"); } //程序的listener一直不关闭 //listener.Close(); }
C#编程,如何对持续传输过来的数据做监测呢?
使用场景如下: 1、客户端硬件,通过socket,持续回发多种监测数据,如:血氧、心率等; 2、要求服务端,完成如下监测,如:血氧持续5分钟低于90% 3、被触发时,服务端向用户手机客户端推送报警信息。 提问: 当多个客户端硬件,同时在线,如何对这些客户端硬件的数据,进行持续的分析监测? 求一个解决方案。
C++ Linux网络编程,超简单的例子,就是不知道什么原因,客户端收不到消息
综述:就是客户端和服务端的一次通信,但是总也运行不到预期的结果,运行结果见最后 服务端:做一件事:接受客户端的TCP链接后,向客户端发送一个字符串,但是总在发送的地方返回值为0.求解。。。。 ``` #include<iostream> #include<netinet/in.h> #include<sys/types.h> #include<sys/socket.h> #include<unistd.h> #include<string.h> #include<time.h> using namespace std; int main(int argc,char* argv[]) { int listenfd,confd; sockaddr_in recaddr; char receiveline[100]="I have received the msg\r\n"; listenfd = socket(PF_INET,SOCK_STREAM,0); if(listenfd<0) { cout<<"error socket"<<endl; return 0 ; } bzero(&recaddr,sizeof(recaddr)); recaddr.sin_family = PF_INET; recaddr.sin_addr.s_addr = INADDR_ANY; recaddr.sin_port = htons(7999); if(bind(listenfd,(sockaddr*)&recaddr,sizeof(recaddr))<0) { cout<<"bind error"<<endl; return 0; } if(listen(listenfd,20)<0) { cout<<"listen error"<<endl; return 0; } for(;;) { if(confd = accept(listenfd,(sockaddr*)NULL,NULL)<=0) { cout<<"connect error"<<endl; return 0; } cout<<receiveline<<endl; if(send(confd,receiveline,strlen(receiveline),0)<0) { **//每次都会走到这里面来,不知道为什么这个地方发送的数据为0** cout<<"send empty msg"<<endl; return 0; } if(close(confd)<0) { cout<<"faile to close socket"<<endl; return 0; } } cout<<"end of program"<<endl; return 0; } ``` 客户端: ``` #include<iostream> #include<netinet/in.h> #include<string.h> #include<sys/types.h> #include<sys/socket.h> #include<arpa/inet.h> #include<unistd.h> using namespace std; int main(int argc,char* argv[]) { if(argc!=2) { cout<<"wrong input"<<endl; return 0; } int sendfd,n; sockaddr_in addr; bzero(&addr,sizeof(addr)); sendfd = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP); if(sendfd<0) { cout<<"error in socket"<<endl; return 0; } addr.sin_family = PF_INET; addr.sin_port = htons(7999); addr.sin_addr.s_addr= inet_addr("127.0.0.1"); cout<<"ready to connect"<<sendfd<<endl; if(connect(sendfd,(sockaddr*)&addr,sizeof(addr)) < 0) { cout<<"connecting fail"<<endl; return 0; } cout<<"ready to read:"<<sendfd<<endl; char receiveline[100] = {0}; while( (n = recv(sendfd,receiveline,100,0)) > 0 ) { cout<<"n:"<<n<<endl; receiveline[n] = 0; if(fputs(receiveline,stdout)==EOF) { cout<<"error"<<endl; return 0; } } if(n<0) {cout<<"error"<<endl;} cout<<"end of program"<<endl; return 0; } ``` 目前程序的输出为: 服务端: [joker@localhost serv]$ ./SocketServ I have received the msg send empty msg 客户端: [joker@localhost cli]$ ./SocketCli 127.0.0.1 ready to connect3 ready to read:3 end of program 这问题搞了我两天了,求大侠们解。。。
Linux 网络编程 实现不了服务端循环发送,客户端循环接收
客户端和服务端建立连接之后,客户端向服务端发送一个文件的路径。 服务端通过文件路径打开这个文件,每次读取文件内容发送给客户端, 实现文件的拷贝。 服务端的程序 ``` #include<stdio.h> #include<stdlib.h> #include<netdb.h> #include<sys/socket.h> #include<sys/types.h> #include<arpa/inet.h> #include<unistd.h> #include<sys/stat.h> #include<fcntl.h> #include<dirent.h> #include<string.h> #define PORT 1234 #define BACKLOG 1 void send_file(); int num=0; int listenfd,connectfd; struct sockaddr_in server; struct sockaddr_in client; socklen_t addrlen; int main(int argc,char *argv[]) { if((listenfd=socket(PF_INET,SOCK_STREAM,0))==-1) { perror("socket() error"); exit(1); } int opt=SO_REUSEADDR; setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); bzero(&server,sizeof(server)); server.sin_family=PF_INET; server.sin_port=PORT; server.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(listenfd,(struct sockaddr *)&server,sizeof(server))==-1) { perror("bind error"); exit(1); } if(listen(listenfd,BACKLOG)==-1) { perror("listen error"); exit(1); } addrlen=sizeof(client); if((connectfd=accept(listenfd,(struct sockaddr *)&client,&addrlen))==-1) { perror("accept error"); exit(1); } printf("client's ip is %s,port is %d\n",inet_ntoa(client.sin_addr),htons(client.sin_port)); char file_name[256]; memset(file_name,'\0',sizeof(file_name)); num=recv(connectfd,file_name,255,0); if(num==-1){ perror("recv() errror!"); exit(1); } puts(file_name); send_file(file_name); close(listenfd); close(connectfd); } void send_file(char file_name[]) //读取文件内容循环发送 { int fd,read_num,write_num,src; char buf[1024]; memset(buf,'\0',sizeof(buf)); src=open(file_name,O_WRONLY,0644); if(src<0){ perror("open failure"); exit(0); } while((read_num=read(src,buf,50))>0) { send(connectfd,buf,sizeof(buf),0); } } ``` 客户端的程序 ``` #include<stdio.h> #include<stdlib.h> #include<netdb.h> #include<string.h> #include<sys/socket.h> #include<sys/types.h> #include<arpa/inet.h> #include<unistd.h> #define PORT 1234; #define MASDATASIZE 100 int main(int argc,char *argv[]) { int sockfd,num; char buf[MASDATASIZE]; char file[256]; struct sockaddr_in server; if(argc!=2){ printf("Usage:%s <IP ADDRESS>\n",argv[0]); exit(1); } if((sockfd=socket(PF_INET,SOCK_STREAM,0))==-1){ perror("socket() errror!"); exit(1); } bzero(&server,sizeof(server)); server.sin_family=PF_INET; server.sin_port=PORT; inet_aton(argv[1],&(server.sin_addr)); if(connect(sockfd,(struct sockaddr *)&server,sizeof(server))==-1) { perror("connect () errror"); exit(1); } strcpy(file,"/home/june/a.txt"); //填写的路径名 send(sockfd,file,sizeof(file),0); do{ if((num=recv(sockfd,buf,MASDATASIZE,0))==-1){ perror("recv() errror!"); exit(1); } printf("%d\n",num); //puts(buf); 想通过puts看看有没有接收成功 }while(num>0); printf("server message len: %d :%s\n",num,buf); close(sockfd); return 0; } ``` 在同一台机器上进行测试的 现在碰到的问题是实现不了服务端循环发送文件内容,客户端循环接收文件内容,错误提示Connection reset by peer![图片说明](https://img-ask.csdn.net/upload/201812/29/1546084046_815051.png)
新手关于python socket编程的一些疑问。。。。
先上代码 服务端代码 ``` import socket def start_server(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = "" port = 6666 address = (host, port) s.bind(address) s.listen(3) conn, temp = s.accept() conn.send("welcome to my server") #问题在这里,如果客户端没有recv上边服务器发送的welcome to my server,再调用recv就会出错 msg = conn.recv(1024) print "msg = ", msg conn.close() s.close() if __name__ == "__main__": start_server() ``` 服务端代码非常简单 然后上客户端代码(先上没问题的) ``` import socket def start_client(): conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = socket.gethostname() port = 6666 address = (host, port) conn.connect(address) print "-----------" print conn.recv(1024) #############注释error####### conn.close() if __name__ == "__main__": start_client() ``` 这样子先开服务端,再开客户端是没问题的。 这时问题来了。如果我把客户端的conn.recv(1024)注释掉,当客户端代码跑完,服务端就会有问题了。 服务端出错提示如下: Traceback (most recent call last): File "C:\Program Files (x86)\Adobe\Adobe Flash Builder 4.7\eclipse\dropins\pydev\plugins\org.python.pydev.debug_2.5.0.2012040618\pysrc\pydevd.py", line 1346, in <module> debugger.run(setup['file'], None, None) File "C:\Program Files (x86)\Adobe\Adobe Flash Builder 4.7\eclipse\dropins\pydev\plugins\org.python.pydev.debug_2.5.0.2012040618\pysrc\pydevd.py", line 1060, in run pydev_imports.execfile(file, globals, locals) #execute the script File "E:\pythonCode\server.py", line 31, in <module> start_server() File "E:\pythonCode\server.py", line 24, in start_server msg = conn.recv(1024) socket.error: [Errno 10053] 是什么问题呢? 我想了很久,也试过好多测试代码,发觉如果建立连接后,在一端A,先发送一些数据,如果B端没有recv,且当B端连接close的时候。A端因为阻塞在recv部分的代码不是如约的得到空字符串,而是出现了这个报错。我的问题是python写socket编程必须send,recv一一对应使用么??? 刚开始学,各位大牛指导下啊
c++,socket,没启动客户端,服务端显示已有204.204.204.204的ip连接了
``` #include "stdafx.h" #include "winsock2.h" #include "iostream" #pragma comment (lib,"ws2_32") using namespace std; int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsadata; WSAStartup(MAKEWORD(2, 2), &wsadata); cout << "开始创建套接字\n"; SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); struct sockaddr_in saddrin; saddrin.sin_family = AF_INET; saddrin.sin_addr.S_un.S_addr = inet_addr("INADDR_ANY"); saddrin.sin_port = htons(9100); cout << "开始绑定\n"; bind(s, (sockaddr *)&saddrin, sizeof(saddrin)); cout << "开始监听\n"; listen(s, SOMAXCONN); struct sockaddr_in sClient; int num = sizeof(sClient); SOCKET client= accept(s, (sockaddr *)&sClient, &num); if (client) { cout << "已接受来自客户端的连接\n"; cout << sClient.sin_port<<'\n'; cout<< inet_ntoa(sClient.sin_addr)<<'\n'; char msg[MAXBYTE] = { 0 }; recv(client, msg, sizeof(msg), 0); cout << msg; //char msgReply[MAXBYTE ] = { 0 }; strcpy_s(msg, "this is a reply for the test\n"); send(client, msg, strlen(msg) + sizeof(char), 0); cout << "已发送消息\n"; } else { cout << "无客户端的连接"; } system("PAUSE"); return 0; } ``` ![图片说明](https://img-ask.csdn.net/upload/201603/05/1457181067_216641.png) 我的客户端还没启动,只启动了服务端,这个204.204.204.204就连接了,然后就返回了?这个ip是怎么回事?怎么解决?
请问如何用linux套接字编程来发挥万兆网卡的性能?
双线程,一个生产数据放入kfifo,一个从kfifo取出数据,通过套接字发送。最终测试出来速度只能达到400MB/S。(kfifo出队64KB数据要100us) 之后我将生产者做了更改,让它只更新队首的in指针,不做数据拷贝,此时速度能达到1000MB/S。(kfifo出队64KB数据只要10us) 我怀疑是生产者生产数据写入队列时,导致消费者所在的cpu cache失效,然后cache未命中导致速度骤降。但是不知道怎么解决这个问题。 在网上搜索答案,但是没有找到类似情况。看到有一个和我问题应该比较类似的,但是没有找到解决方法。 《请问为何tcp send第一次时很慢, 第二次时很快呢?》 https://www.oschina.net/question/2897213_2193602 ```c #include "szg_common.h" #include "szg_kfifo.h" #include "szg_socket.h" /**kfifo * 队列是将linux内核中的kfifo移到了这里来用,用malloc来替代内核中的kmalloc * 此代码(发送端)运行在NXP T4240上,系统linux,万兆网卡。 * 接收端软件运行在PC上,系统windows10,万兆网卡。 * * 1.正常出入队,kfifo总大小64M 元素大小256bytes 期望出队和期望入队都是256个元素 * 速度400MB/S 出队64k要100us send要50us * 2.注释掉kfifoin中的两行memcpy(szgKfifoCopyIn中的),让其只更新队首in指针 * 速度1000MB/S 出队64k要10us send要50us * * */ #define KFIFO_SEND_SIZE 0x10000 //64k #define FIFO_IN 0x100 //每次入队时期望入队的元素个数:256个(即256*256 = 64k) #define FIFO_OUT 0x100 //每次出队时期望出队的元素个数:256个(即256*256 = 64k) #define FIFO_E_SIZE 0x100 //元素大小:256byte #define FIFO_SIZE 0x4000000 //总大小:64Mbyte (256*256*1024个) kfifo testkFifo; void *szgTestKfifoThread(void *param) { UINT32 ret; char data_buf[KFIFO_SEND_SIZE] = {0}; while(TRUE) { ret = szgKfifoIn(&testkFifo,data_buf,FIFO_IN); if(ret == 0) { pthread_yield(); //usleep(2); } } } int kfifo_test(void) { INT32 listenFd; INT32 connectFd; INT32 ret; UINT32 clientIp; pthread_t threadId; pthread_attr_t attr; struct timeval start,end; char send_buf[KFIFO_SEND_SIZE]; memset(send_buf,1,KFIFO_SEND_SIZE); signal(SIGPIPE,SIG_IGN); /** * 初始化kfifo * 总大小 64M * 元素大小 256byes * 元素个数 256*1024个 * 出队,入队都是期望256个元素,不到256个有多少出多少,实际个数作为返回值返回 */ ret = szgKfifoAlloc(&testFifo,FIFO_SIZE/FIFO_E_SIZE,FIFO_E_SIZE); CHECK_EXIT(ret == ERROR, "fifo init err!"); /*创建线程,线程分离*/ pthread_attr_init (&attr); pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); if (0 != pthread_create(&threadId,&attr, (void *)szgTestKfifoThread,NULL)) { SZG_LOG(SZG_LOG_ERR,"Create Thread data_filter_thread Fail \n"); return ERROR; } /*服务器初始化 端口6101 发送缓存2M 接收缓存1M(2M/2)*/ listenFd = szgSockInit(NULL,6101,0x200000); CHECK_EXIT(listenFd < 0, "socket error"); while(TRUE) { printf("wait connect\n"); /*客户端ip通过&clientIp返回(其实下面没用到)*/ connectFd = szgSockAccept(listenFd,&clientIp); if (connectFd < 0) { SZG_LOG(SZG_LOG_ERR,"server Accept Failed!/n"); return 0; } while(TRUE) { //gettimeofday(&start,NULL); /*出队 256*256 */ ret = szgKfifoOut(&testkFifo,send_buf,FIFO_OUT); if(ret == 0)//没有数据 { pthread_yield(); continue; //usleep(2); } //gettimeofday(&end,NULL); //printf("kfifo time %lu us \n",(1000000*(end.tv_sec-start.tv_sec) + (end.tv_usec-start.tv_usec))); /*发送64k*/ //gettimeofday(&start,NULL); ret = szgSendData(connectFd,send_buf,ret*FIFO_E_SIZE); if(ret == ERROR) { SZG_LOG(SZG_LOG_ERR,"szgSendData data error\n"); break; } //gettimeofday(&end,NULL); //printf("send time %lu us \n",(1000000*(end.tv_sec-start.tv_sec) + (end.tv_usec-start.tv_usec))); } } return 0; } ```
咨询大家关于C#套接字的问题
我在网上看的一些例子,套接字传送的只是ASCII或者utf8编码的字符,这个不能收发汉字,请问用什么格式可以收发汉字。另外,服务器端能主动去连接客户端的ip+端口号吗?我的wifi模块不能连接服务器的port,只能连接上ip地址,所以终端不能主动去连接服务器端的套接字,这该怎么解决。谢谢
【求助】SOCKET编程,网络编程
本人自学SOCKET,跟着教程写了几行代码 但是接收(recv)那个循环里面总是出问题,具体情况是运行到第二次的时候程序就蹦了。 我的改进:后来经过一天的思考推敲我发现是有一中返回情况SOCKET_ERRO没有处理 于是家进入了 但还是错误,所以特来贵吧寻求帮助,(ps:我之前试过不用realloc扩大空间储存程序是ok的,但是用了realloc就出问题了,但是我觉得主要问题又不是在realloc哪里,可能是recv那里),求大神花上几分钟看看我的代码,谢谢,请赐教!!! 代码 #include <stdio.h> #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") int main(void) { WSADATA wd; SOCKET c; char recvBuf[1000]="", sendBuf[1000]=""; SOCKADDR_IN saddr; /*1.初始化操作*/ if(WSAStartup(MAKEWORD(2,2),&wd)) //0表示调用成功 { printf("调用失败\n"); return 0; } if(HIBYTE(wd.wVersion)!=2 || LOBYTE(wd.wVersion)!=2) //版本打开确认 { printf("初始化失败"); WSACleanup(); return 1; } /*2.创建客户端socket*/ c = socket(AF_INET, SOCK_STREAM, 0); if(c == INVALID_SOCKET) { printf("创建socket失败\n\n"); return 0; } /*3.定义要连接的服务端信息*/ char ip[200] = ""; memset(ip,0,sizeof(ip)); printf("请输入你要获取的ip:\n"); gets(ip); saddr.sin_addr.S_un.S_addr = inet_addr(ip); saddr.sin_family = AF_INET; //char port; // printf("请输入要获取的IP的端口:\n"); //scanf("%d",&port); saddr.sin_port = htons(80); /*4.连接服务端*/ if(connect(c, (SOCKADDR*)&saddr, sizeof(SOCKADDR))) { printf("链接失败\n"); return 0; } char address[200] = ""; memset(address,0,sizeof(address)); printf("请输入要连接的网址:\n"); gets(address); strcpy(sendBuf,"GET / HTTP/1.0\r\n"); strcat(sendBuf,"host:"); strcat(sendBuf,address); strcat(sendBuf,"\r\n\r\n"); send(c, sendBuf, strlen(sendBuf)+1, 0); memset(recvBuf,0,sizeof(recvBuf)); // FILE *fp; /* fp = fopen("C:\\Users\\liuwan\\Desktop\\web.html","w"); if(!fp) { printf("open file failed\n"); return 0; }*/ char *receive = NULL; char *new_point = NULL; //零时指针 int temp = 0, temp1 = 0; receive = (char*)malloc(5); //开辟临时大小 memset(receive,0,5); //初始化 while(temp = recv(c,recvBuf,1000,0)) //循环接收 到结束返回零 { if(temp != SOCKET_ERROR) //网络阻塞返回-1 不执行 { temp1 += temp; new_point = (char*)realloc(receive,temp1+2); //开辟适应此次加以前接收过的所有字符的空间大小(temp+2) if(new_point == NULL) //开辟失败进入错误流程 { printf("no have enough memory.\n"); free(receive); return 0; } receive = new_point; strcat(receive,recvBuf); memset(recvBuf,0,sizeof(receive));//清空接收缓冲区,以便进行下一次接收 puts(receive); } memset(recvBuf,0,sizeof(recvBuf)); } // fclose(fp); printf("................................接收完毕..............................\n"); closesocket(c); WSACleanup(); system("pause"); return 0; }
C++服务端发送给客户端消息,但客户端没有显示
服务端代码: #include"iostream" #include<winsock2.h> #pragma comment(lib,"ws2_32") #include<stdlib.h> using namespace std; int main() { WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in sockaddr; sockaddr.sin_family = PF_INET; sockaddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); sockaddr.sin_port = htons(827); bind(s, (SOCKADDR*)&sockaddr, sizeof(SOCKADDR)); listen(s, 1); SOCKADDR clientAddr; int nSize = sizeof(SOCKADDR); SOCKET clientSock; clientSock = accept(s, (SOCKADDR*)&clientAddr, &nSize); send(clientSock, "helllo client \r\n", strlen("hello client \r\n") + sizeof(char), NULL); closesocket(clientSock); closesocket(s); WSACleanup(); return 0; } 客户端代码: #include"iostream" #include<stdlib.h> #include<winsock2.h> #pragma comment(lib,"ws2_32") using namespace std; int main() { WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); SOCKET s = socket(PF_INET,SOCK_STREAM, IPPROTO_TCP); sockaddr_in sockAddr; sockAddr.sin_family = PF_INET; sockAddr.sin_addr.S_un.S_addr = inet_addr("127,0,0,1"); sockAddr.sin_port = htons(827); connect(s, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR)); char szBuffer[MAXBYTE] = { 0 }; recv(s, szBuffer, MAXBYTE, NULL); printf("szBuffer=%s\r\n", szBuffer); closesocket(s); WSACleanup(); return 0; }
socket这道难题让我炸了
最近用c#写一个小程序,用了socket通讯类,本人小白一个,只因为了赶进度,所以稍稍 恶补了一下网络编程,我这里有几个小bug,望大神指点迷津。 一:我客户端没发一条消息,服务端的端口加1(例:原本端口为2000,第一条消息为2001,以此类推) 二:服务端接受的消息怎样让他转发出去,是不是要多new出两个对象,是ip对象,还是socket对象。 三:我想登陆的时候,用二维码扫码登陆。这个接口怎么弄。 (网络的世界是孤僻的,网络的世界时寂静的,就让我们组个团,打打怪,升级升级我们自己的经验)
socket传输文件时遇到的问题!
先给出代码。 客户端: SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(4444); HANDLE fp =CreateFile(L"E:\\aTest.txt",GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); DWORD fileLen =GetFileSize(fp, &fileLen); cout << "你选择的文件大小为:" << fileLen << endl; connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); char * buffer = new char[fileLen]; DWORD bufferLen = 0; ReadFile(fp, buffer, fileLen, &bufferLen, NULL); bool isFirst = true; int sendLen = 0; int sentLen = 0; char sendBuffer[200]; int leftLen = fileLen; while (true) { if (isFirst) { sendLen = send(sockClient, "Test", 1, 0); isFirst = false; if (sendLen < 0) { cout << "第一帧发送失败,程序结束." << endl; break; } Sleep(1000); continue; } if ((leftLen <= 0) || (sentLen >= fileLen)) break; if (leftLen >= 200) { memcpy(sendBuffer, buffer + sentLen, 200); sendLen = send(sockClient, sendBuffer, 200, 0); if (sendLen < 0) { cout << "帧发送失败,程序结束." << endl; break; } } else { memcpy(sendBuffer, buffer + sentLen, leftLen); sendLen = send(sockClient, sendBuffer, leftLen, 0); if (sendLen < 0) { cout << "帧发送失败,程序结束." << endl; break; } Sleep(1000); send(sockClient, "#", 1, 0); } sentLen += sendLen; leftLen = fileLen - sentLen; cout << "已经发送" << sentLen << endl; } if (sentLen == fileLen) cout << "文件发送成功." << endl; else cout << "文件发送失败." << endl; closesocket(sockClient); WSACleanup(); delete[] buffer; } 服务器端: SOCKET socksrv = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN addrsrv; addrsrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); addrsrv.sin_family = AF_INET; addrsrv.sin_port = htons(4444); bind(socksrv, (sockaddr*)&addrsrv, sizeof(SOCKADDR)); listen(socksrv, 5); SOCKADDR_IN addrclient; int len = sizeof(SOCKADDR); int recvLen = 0; int recvedLen = 0; DWORD writeLen; int fileLen = 0; char* buffer; char recvBuffer[200]; while (1) { SOCKET sockconn = accept(socksrv, (SOCKADDR*)&addrclient, &len); buffer = new char[1024 * 1024 * 10]; recvLen = recv(sockconn, recvBuffer, 200, 0); if (recvBuffer[0] == 'test') { printf("开始接收文件\n"); memset(recvBuffer, 0, 200); } while (true) { recvLen = recv(sockconn, recvBuffer, 200, 0); if ((recvLen == 1) && (recvBuffer[0] == '#')) break; memcpy(buffer + recvedLen, recvBuffer, recvLen); recvedLen += recvLen; printf("接收:%d\n", recvLen); printf("已经接收%i字节数据\n", recvedLen); } HANDLE fp = CreateFile(L"C://Users\apple\Desktop", GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); WriteFile(fp, buffer, recvedLen, &writeLen, NULL); printf("写入文件长度:%u\n", writeLen); delete[] buffer; WSACleanup(); } } 代码有点乱,还有许多要改的地方,但是大体框架是这样。 运行的时候,客户端能够成功发送文件,服务器端也能正确显示接受的文件大小,然后写入文件却是0,然后就报错,不知道是为什么?
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
毕业设计 微信小程序 音乐播放器
大学室友根据网易云的API自己制作的微信小程序,获得校级优秀毕业设计(如果你是大佬请绕行),下面简单介绍一下: 根据多次的使用不同的音乐APP发现,网易云音乐的页面设计最适合作为本微信小程序的页面基础模板。由于本作品是微信小程序,就需要剔除APP中的各种冗余的功能,页面设计也需要尽可能的简单直接,内容也要充实。然后根据以上几点,对应用的功能模块进行大量的分析与重构...
想查看微信好友撤回的消息?Python帮你搞定
要说微信最让人恶心的发明,消息撤回绝对能上榜。 比如你现在正和女朋友用微信聊着天,或者跟自己喜欢的女孩子聊着天,一个不留神,你没注意到对方发的消息就被她及时撤回了,这时你很好奇,好奇她到底发了什么?于是你打算问问她发了什么,结果她回一句"没什么"。这一回复,让你的好奇心更加强烈了,顿时就感觉消息撤回这一功能就是用来折磨人的。 那么有没有什么办法能够知道你心爱的她(他)到底撤回了什么呢?不要着急,P...
程序员必备的8个学习工具
取其精华,去其糟粕
2019年12月中国编程语言排行榜
2019年12月4日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.60% 2 c/c++ 16.58% 3 c# 12.59% 4 javascript 12.21% 5 python 7.96% 6 go 7.19% 7 php ...
拼不过 GO?阿里如何重塑云上的 Java
阿里妹导读:Java 诞生于20年前,拥有大量优秀的企业级框架,践行 OOP 理念,更多体现的是严谨以及在长时间运行条件下的稳定性和高性能。反观如今,在要求快速迭代交付的云场景下,语言的简单性似乎成了首要的要求,而传统的 Java 语言显得有一些过于重量了。今天,阿里 JVM 团队技术专家郁磊(花名:梁希)分享 JVM 团队是如何面对和处理集团巨大的业务规模和复杂的业务场景的。 音乐无国...
Java知识体系最强总结(2020版)
更新于2020-01-05 18:08:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 整理的Ja
一个“/”键,封锁了整个互联网
正所谓无BUG不生活,从你含辛茹苦地码着第一行代码开始,bug就如影随形。 其实,bug 被自己或者是测试人员发现都是好事;但如果是被用户发现,又或者导致了客户和公司的巨额损失……这些未知后果,就如同悬在头顶的一把利刃,让人脊背发凉…… 但一个小小的bug,可能带给你惊吓,也可能带来惊喜。接下来,我们就来看看 bug 都能带来哪些意想不到的影响呢? 1.来自 Amazon 的圣诞大礼包~ 201...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实
自学系列 | 就谈兴趣!
最近接到很多读者的私信,基本都是有关方向的选择上以及如何自学上,还有部分读者问到有关前端的方向,能不能详细写写如果从零学习,能够达到找工作的标准。而且这个自学能力是我们一辈子的生存技能,无论干什么,都离开这种能力,这是毋容置疑的。 之前有关自学的文章确实挺零散的,而且还不够详细。所以小鹿打算利用业余时间把如何自学写成一整个系列《如何成为一个优秀的自学者》。写之前呢,希望我们每个人先放下心中的执念...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前言 很多次小伙伴问到学习方法,我也很想写这样的一篇文章来跟大家讨论下关于学习方法这件事情。 其实学习方法这个事情,我没啥发言权
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了......,这可都是提升你幸福感的高效率生产力工具哦! 走起!...... NO、1 ScreenToGif 屏幕,摄像头和
还看不懂同事代码?快来补一波 Java 7 语法特性
前言 Java 平台自出现到目前为止,已经 20 多个年头了,这 20 多年间 Java 也一直作为最流行的程序设计语言之一,不断面临着其他新兴编程语言的挑战与冲击。Java 语言是一种静态强类型语言,这样的语言特性可以让 Java 编译器在编译阶段发现错误,这对于构建出一个稳定安全且健壮的应用来说,尤为重要。但是也因为这种特性,让 Java 开发似乎变得缺少灵活性,开发某些功能的应用时,代码量可...
为什么TCP建立连接协议是三次握手,而关闭连接却是四次挥手呢?
看到了一道面试题:“为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?为什么不能用两次握手进行连接?”,想想最近也到金三银四了,所以就查阅了相关资料,整理出来了这篇文章,希望对你们有所帮助。 TCP 连接 我们先来补一下基础什么是 TCP 协议?传输控制协议( Transmission Control Protocol, TCP )是种面向连接、确保数据在端到端间可靠传输的协议。面向连...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦......,嗯,我们导员是所有导员中最帅的一个,真的...... 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强......,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧?
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
一文带你看清 HTTP 所有概念
上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就来深究一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层) HTTP 标头 先来回顾一下 HTTP1.1 标头都有哪几种 HTTP 1.1 的标头主要分为四种,通用标头、实体标头、请求标头、响应标头,现在我们来对这几种标头进行介绍 通用
世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
点击上方蓝字设为星标下面开始今天的学习~今天分享四个代码量很少,但很牛逼很经典的算法或项目案例。1、no code 项目地址:https://github.com/kelseyhight...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他
初识 MyBatis MyBatis 是第一个支持自定义 SQL、存储过程和高级映射的类持久框架。MyBatis 消除了大部分 JDBC 的样板代码、手动设置参数以及检索结果。MyBatis 能够支持简单的 XML 和注解配置规则。使 Map 接口和 POJO 类映射到数据库字段和记录。 MyBatis 的特点 那么 MyBatis 具有什么特点呢?或许我们可以从如下几个方面来描述 MyBati...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
相关热词 c#判断数字不得为负数 c#帧和帧协议 c#算偏移值 c# 在枚举中 c#6 字符串 插值 c#程序中的占位符标签 c#监听数组变化 c# vlc c#索引实现 c# 局域网广播通信
立即提问