这篇文章主要介绍了如何用C语言实现(电源)插座编程,文中代码非常详细,供大家学习参考,感兴趣的朋友可以了解下
前不久刚看完《c primer plus》 ,收获颇丰,对于C语言也有了更全面的认识,对于模块化和数据结构也有了更多的想法,之前学过C语言,但很多已经记不起了,知识很零散,这也是我看这本书的原因。
之后一段时间都会在进一步学习编程的同时研究(电源)插座通讯,目标是要将(电源)插座研究透,设计出自己的框架,以后从事服务器开发和构架应该也会大有裨益。
好了,废话不多说,奉上网上找的源码。
/*窗口插座服务端编程测试*/
#include stdio.h //用于打印函数等函数的调用
#包含Winsock 2。h//套接字的函数调用
#杂注注释(lib,' ws2_32.lib') //C语言引用其他类库时,除了h。文件外,还要加入对应的解放运动文件,如果仍提示错误则需要在集成驱动电子设备中手动加入该链接库
int main()
{
WSADATA wsaData
WSAStartup(MAKEWORD(2,2),wsa数据);
SOCKET s=socket(PF_INET,SOCK_STREAM,IP proto _ TCP);
在sockaddr
sockaddr.sin _ family=PF _ INET
sockaddr .S_un .s _ addr=inet _ addr(' 127。0 .0 .1 ');//需要绑定到本地的哪个互联网协议(互联网协议)地址
sockaddr。sin _ port=htons(9000);//需要监听的端口
bind(s,(SOCKADDR*)sockaddr,sizeof(SOCKADDR));//进行绑定动作
听(s,1);//启动监听
printf('侦听端口[%d].\n ',9000);
而(真)
{
客户地址
int size=sizeof(SOCKADDR);
(电源)插座客户端(电源)插座
clientsocket=accept(s,clientAddr,size);//阻塞,直到有新传输控制协议客户端连接
printf('***SYS***新客户端被触动. \ n ');
char* msg='您好,我的客户“.\ r \ n”;
send(clientsocket,msg,strlen(msg) sizeof(char),NULL);//这里的第三个参数要注意,是加了一个茶长度的
printf((* * * *系统* * *你好.\ n’);
而(真)
{
char buffer[max byte]={ 0 };
recv(clientsocket,buffer,MAXBYTE,NULL);//一直接收客户端(电源)插座的派遣操作
printf(' * * *客户端* * * % s \ n ',缓冲区);
}
关闭套接字(客户端套接字);//关闭(电源)插座
}
closesocket//关闭监听(电源)插座
WSACleanup();//卸载
getchar();
退出(0);
}
/*窗口插座客户端编程测试*/
#include stdio.h //用于输入、输出函数的调用,printf,获取
#包含Winsock 2。h//套接字头文件
#包含Windows.h //为了方便调试,所以加入了等待2秒才进行连接服务器,这里用到了睡眠函数
#杂注注释(lib,' ws2 _ 32 ')//套接字库文件
typedef结构sockaddr _ in
int main()
{
睡眠(2000);//沉睡2秒再连接计算机网络服务器
WSADATA wsaData
WSAStartup(MAKEWORD(2,2),wsa数据);
SOCKET s=socket(PF_INET,SOCK_STREAM,IP proto _ TCP);
在sockaddr
sockaddr.sin _ family=PF _ INET
sockaddr .S_un .s _ addr=inet _ addr(' 127。0 .0 .1 ');
sockaddr。sin _ port=htons(9000);
connect(s,(SOCKADDR*)sockaddr,sizeof(SOCKADDR));
char buffer[max byte]={ 0 };
recv(s,buffer,MAXBYTE,NULL);
printf(' * * *服务器* * * % s ',缓冲区);
而(真)
{
char * mymsg=(char *)malloc(sizeof(char)* 100000);
printf('您现在可以与服务器聊天了:\ n’);
gets(mymsg);
send(s,mymsg,strlen(mymsg) sizeof(char),NULL);
/*
收到函数中的缓冲长度参数是可以固定值的
派遣函数中的缓冲长度参数不能固定值,需要看实际长度,并且考虑到'\0'字符串
*/
}
封闭插座
WSACleanup();
getchar();
退出(0);
}
/*窗口插座客户端编程测试*/
#include stdio.h //用于输入、输出函数的调用,printf,获取
#包含Winsock 2。h//套接字头文件
#包含Windows.h //为了方便调试,所以加入了等待2秒才进行连接服务器,这里用到了睡眠函数
#杂注注释(lib,' ws2 _ 32 ')//套接字库文件
typedef结构sockaddr _ in
int main()
{
睡眠(2000);//连接到服务器前休眠2秒钟
WSADATA wsaData
WSAStartup(MAKEWORD(2,2),wsa data);
SOCKET s=socket(PF_INET,SOCK_STREAM,IP proto _ 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(9000);
connect(s,(SOCKADDR*)sockaddr,sizeof(SOCKADDR));
char buffer[max byte]={ 0 };
recv(s,buffer,MAXBYTE,NULL);
printf(' * * *服务器***%s ',缓冲区);
while(真)
{
char * mymsg=(char *)malloc(sizeof(char)* 100000);
printf('您现在可以与服务器聊天了:\ n ');
gets(mymsg);
send(s,mymsg,strlen(mymsg) sizeof(char),NULL);
/*
recv函数中的bufferlength参数可以有一个固定值。
send函数中的bufferlength参数不能有固定值。它取决于实际长度,并考虑到了' \0 '字符串。
*/
}
closesocket
WSACleanup();
getchar();
退出(0);
}
刚开始不能正常工作,总是报错。查了资料,终于找到了解决办法。
常见错误:
未知的类型名“sockaddr_in”表明未定义的类型更改有两个原因。第一,没有添加ws2_32.lib库,可以在项目的链接设置中手动添加。第二,头文件只定义了结构名,没有定义它的别名,所以sockaddr_in不能用来直接定义类型。需要用struct sockaddr_in定义,也可以在sockaddr_in中添加typedef struct sockaddr _的别名定义;所以它能跑。
真正重要的是眼睛看不见的。
以上是C语言3354Socket编程示例代码的详细内容。更多关于C语言3354Socket编程的信息,请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。