c语言tcp连接(c语言 tcp服务器)

      最后更新:2023-05-03 07:55

      求C语言高手,实现一个简单的TCPIP程序以实现两台计算机之间的聊天通信,

      你上面给出的代码其实就是 MSDN 里面的演示代码,不过不完整,只演示了两个函数的使用,我给你看看我写的 TCP 通讯程序,可以在同一个局域网内的两台不同计算机之间聊天 :这其实就是某本将网络通讯的教程里面的例子,不过是我自己重写了一遍,下面给你代码:========================下面是公共代码:========================#ifndef __CINITSOCK__H__#define __CINITSOCK__H__#include #include #pragma comment( lib, "ws2_32.lib" )#pragma comment( lib, "iphlpapi.lib" )class CInitSock{public:CInitSock( int nMinorVer = 2, int nMajorVer = 2 ){WSADATA wsData;WORD wVer = MAKEWORD( nMinorVer, nMajorVer );if( 0 != WSAStartup( wVer, &wsData ) ) exit( 0 );}~CInitSock( ){WSACleanup( );}};#endif========================下面是客户端的代码 :=======================#include "CInitSock.h"#include using namespace std;CInitSock g_Sock;void main( ){SOCKET sockClient = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );if( INVALID_SOCKET == sockClient )return;sockaddr_in sockAddr;sockAddr.sin_family = AF_INET;sockAddr.sin_port = htons( 4567 );sockAddr.sin_addr.S_un.S_addr = inet_addr( "127.0.0.1" );if( -1 == connect( sockClient, ( sockaddr* )&sockAddr, sizeof( sockAddr ) ) ){cout << "connect failed" << endl;return;}while( true ){char szBuf[ MAX_PATH ];ZeroMemory( szBuf, sizeof( szBuf ) );cout << "You Say : ";cin >> szBuf;if( SOCKET_ERROR  == send( sockClient, szBuf, MAX_PATH, 0 ) ){cout << "send failed" << endl;return;}int nRecvLen = recv( sockClient, szBuf, MAX_PATH, 0 );if( nRecvLen > 0 ){// szBuf[ nRecvLen ] = '';cout << "Service Say : " << szBuf << endl << endl;}else{cout << "recv failed" << endl;return;}}closesocket( sockClient );}======================下面是服务端的代码:======================#include "CInitSock.h"#include using namespace std;CInitSock g_Sock;void main( ){SOCKET sockClient = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );if( INVALID_SOCKET == sockClient )return;sockaddr_in sockAddr;sockAddr.sin_family = AF_INET;sockAddr.sin_port = htons( 4567 );sockAddr.sin_addr.S_un.S_addr = INADDR_ANY;bind( sockClient, ( sockaddr* )&sockAddr, sizeof( sockAddr ) );listen( sockClient, SOMAXCONN );char szBuf[ MAX_PATH ];sockaddr_in remoteAddr;int nLen = sizeof( sockaddr_in );SOCKET sock = accept( sockClient, ( sockaddr* )&remoteAddr, &nLen );while( true ){int nRecvLen = recv( sock, szBuf, MAX_PATH, 0 );if( nRecvLen > 0 ){cout << "Client Say : " << szBuf << endl << endl;}ZeroMemory( szBuf, sizeof( szBuf ) );cout << "You Say : ";cin >> szBuf;if( SOCKET_ERROR == send( sock, szBuf, MAX_PATH, 0 ) ){cout << "send failed" << endl;}}closesocket( sock );closesocket( sockClient );}希望能够帮到楼主 。
      哥们你电气几班的啊。。
      求C语言高手,实现一个简单的TCPIP程序以实现两台计算机之间的聊天通信,

      采用C语言如何获取https客户端ip地址

      摘要如果是tcp连接的话,服务器端可以通过accept函数获得已连接的客户端的地址,这个地址里面可以解析出ip地址和端口
      采用C语言如何获取https客户端ip地址

      C语言实现socket编程TCP通信的问题?

      我做试验,发现是如果你这样写: char sendbuf[1024] = {"123456n"}; 也就是发送数据加上了换行,服务端立即显示了。看来不加换行就被缓存了(应该是被服务端收到但缓存了)。
      兄嘚,这是缓存问题。可以write之后用fflush清空
      C语言实现socket编程TCP通信的问题?

      求一C语言写的tcp程序的源码,程序越简单越好,C++也可以,最好带注释

      最简单的那种?我给你写一个=,= //服务器#include #include #include #include #include #include #include #include #include #include #include #include main(){//创建套接字int serverSocket= socket(AF_INET,SOCK_STREAM,0);struct sockaddr_in server_addr;struct sockaddr_in clientAddr;int addr_len = sizeof(clientAddr);int client;char buffer[200];//创建地址bzero(&server_addr,sizeof(server_addr));server_addr.sin_family =AF_INET;server_addr.sin_port = htons(5555);server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//绑定bind(serverSocket,(struct sockaddr *)&server_addr,sizeof(server_addr));//帧听listen(serverSocket,5);printf("客户端发过来的 :n");//接收client=accept(serverSocket,(sockaddr *)&clientAddr,(socklen_t*)&addr_len);printf("客户端发过来的 :n");while(1){if(recv(client,buffer,sizeof(buffer),0)>0)printf("客户端发过来的 : %sn",buffer);}return 0;}//客户端#include #include #include #include #include #include #include #include #include #include #include #include main(){struct sockaddr_in serverAddr;int clientSocket=socket(AF_INET,SOCK_STREAM,0);char sendbuf[200];//创建地址信息serverAddr.sin_family=AF_INET;serverAddr.sin_port=htons(5555);serverAddr.sin_addr.s_addr=inet_addr("127.0.0.1");//连接服务器connect(clientSocket,(sockaddr*)&serverAddr,sizeof(serverAddr));printf("连接目标主机中.....n连接完成......n");//while(1){printf("请输入发给服务器的数据 : ");scanf("%s",sendbuf);//strcmp函数作用,比较两个东东(按ASCII值大小相比较),相同就==0。if(strcmp(sendbuf,"x")==0)break;send(clientSocket,sendbuf,sizeof(sendbuf),0);}close(clientSocket);return 0; }
      装个Linux自己有不懂的函数就man一下吧 client:#include#include#include#include#include#include#include#includeint main(int argc,char *argv[]){int sockfd;char buffer[1024];struct sockaddr_in server_addr;struct hostent *host;int portnumber,nbytes;if(3!=argc){fprintf(stderr,"Usage:%s hostname portnumberan",argv[0]);exit(1);}if(NULL==(host=gethostbyname(argv[1]))){fprintf(stderr,"Hostname error:%san",strerror(errno));exit(1);}if(1==(sockfd=socket(AF_INET,SOCK_STREAM,0))){fprintf(stderr,"Socket error:%san",strerror(errno));exit(1);}printf("Socket id is %dn",sockfd);server_addr.sin_family=AF_INET;server_addr.sin_port=htons(portnumber);server_addr.sin_addr=*((struct in_addr *)host->h_addr);server_addr.sin_addr.s_addr=htonl(INADDR_ANY);bzero(&server_addr,sizeof(struct sockaddr_in));//bind sockfdif(-1==bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))){fprintf(stderr,"Bind error:%sna",strerror(errno));exit(1);}printf("Bindn");if(-1==connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))){fprintf(stderr,"Connect Error:%sna",strerror(errno));exit(1);}printf("Connectn");if(-1==(nbytes=recv(sockfd,buffer,1024,0))){fprintf(stderr,"Read Error:%sna",strerror(errno));exit(1);}buffer[nbytes]='';printf("I have received:%sn",buffer);close(sockfd);exit(0);}server:#include#include#include#include#include#include#include#includeint main(int argc,char *argv[]){int sockfd,new_fd;struct sockaddr_in server_addr;struct sockaddr_in client_addr;int sin_size,portnumber;const char hello[]="Hellon";if(2!=argc){fprintf(stderr,"Usage:%s portnumberan",argv[0]);exit(1);}if((portnumber=atoi(argv[1]))<0){fprintf(stderr,"Usage:%s portnumberan",argv[0]);exit(1);}//server creatingif(1==(sockfd=socket(AF_INET,SOCK_STREAM,0))){fprintf(stderr,"Socket error:%s portnumberan",strerror(errno));exit(1);}printf("Socket id is %dn",sockfd);bzero(&server_addr,sizeof(struct sockaddr_in));server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=htonl(INADDR_ANY);server_addr.sin_port=htons(portnumber);//bind sockfdif(-1==bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))){fprintf(stderr,"Bind error:%sna",strerror(errno));exit(1);}printf("Bindn");//listen sockfdif(-1==(listen(sockfd,5))){fprintf(stderr,"Listen error:%sna",strerror(errno));exit(1);}printf("Listenn");while(1){//try until connectsin_size=sizeof(struct sockaddr_in);if(-1==(new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))){fprintf(stderr,"Accept error:%sna",strerror(errno));exit(1);}printf("Accept!n");fprintf(stderr,"Server get connection from %sn",inet_ntoa(client_addr.sin_addr));if(-1==send(new_fd,hello,strlen(hello),0)){fprintf(stderr,"Write Error:%sn",strerror(errno));exit(1);}close(new_fd);}close(sockfd);exit(0); }
      我这有。
      求一C语言写的tcp程序的源码,程序越简单越好,C++也可以,最好带注释

      请问用C语言 socket编程,如何使TCP客户端实现网络恢复后自动重连的功能?

      呵呵,想了想 大概是这样几种可能,你可以尝试一下。 1。重新连接的过程要重新创建sockclient也就是重新调用函数创建。2。服务器关闭后再开启,绑定的是同一个接口。当关闭后再开启的时间较短时端口可能处于忙状态,倒置再开启绑定到该端口失败,也就是服务器端启动失败。 处理办法:你可以利用setsockopt函数,将端口设置为可重用状态,我忘记那个宏是什么了你可以上网去查查setsockopt的用法。希望对你有用 best wishes
      建议你去我的空间博客中看一下关于socket连接过程,你会明白为什么连接不了,因为accept后返回的socket是系统随机分配的。TCP指的点对点,其实就是socket对socket。
      请问用C语言 socket编程,如何使TCP客户端实现网络恢复后自动重连的功能?

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类