为写“QQ“做准备------(1)网络编程
来源:互联网 发布:剑网三叽萝捏脸数据 编辑:程序博客网 时间:2024/05/17 08:46
网络编程须懂点网络的基本概念,趁着这个学期学习网络原理,把网络编程熟悉熟悉,刚接触网络编程,有错误的地方,希望大家多多指正。
通过使用套接字来达到进程间通信目的编程就是网络编程。windows提供的基于网络编程的就是套接字也就是winsock.
以下是基于C语言编译的一个本机即时聊天工具,其实非常简单,就是建立两个工程,一个是服务端service,一个是客户端client,只要用套接字socket将其连接起来,就可以实现。同时进程间通信有基于面向连接(连接导向)的、可靠的、基于字节流TCP,或是基于无连接的传输层协议UDP,这里是用TCP实现的。
先把功能介绍一下吧!
当client发送一个消息(my name is client)给 service时,service收到,service再发送消息给client(my name is service)
1.你必须做好准备工作哦,那就是加载头文件winsock2.h,和库ws2_32.lib.
以下是工程代码,但希望不要直接复制,粘贴哦!另外,我的这个程序存在一点问题(消息是由client先发出),如
希望各位大侠给我指出错误,谢谢啦!--------------------一起学习,天天向上。
1.service端代码
#include<stdio.h>#include<stdlib.h>#include<winsock2.h>void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) { return;}if ( LOBYTE( wsaData.wVersion ) != 1|| HIBYTE( wsaData.wVersion ) != 1 ){WSACleanup( );return; }SOCKET sock=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrser;addrser.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//htonl主机字节序转变成网络字节序。addrser.sin_family=AF_INET;addrser.sin_port=htons(6000);bind(sock,(SOCKADDR*)&addrser,sizeof(SOCKADDR));listen(sock,5);SOCKADDR_IN addrclient;int len=sizeof(SOCKADDR);SOCKET sockclient=accept(sock,(SOCKADDR*)&addrclient,&len);while(1){char sendstr[100];char buffrec[100];recv(sockclient,buffrec,strlen(buffrec)+1,0);char buff[200];sprintf(buff," %s say: %s ",inet_ntoa(addrclient.sin_addr),buffrec);printf("%s\n",buff);printf("please input :\n");gets(sendstr);send(sockclient,sendstr,strlen(sendstr)+1,0);}closesocket(sockclient);WSACleanup();}
2.client端代码
#include<stdio.h>#include<stdlib.h>#include<winsock2.h>void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) { return;}if ( LOBYTE( wsaData.wVersion ) != 1|| HIBYTE( wsaData.wVersion ) != 1 ){WSACleanup( );return; }SOCKET sockclient=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrser;addrser.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//htonl主机字节序转变成网络字节序。addrser.sin_family=AF_INET;addrser.sin_port=htons(6000);connect(sockclient,(SOCKADDR*)&addrser,sizeof(SOCKADDR));char recvbuff[100];char sendbuff[100];char tempbuff[200];while(1){printf("please input:\n");gets(sendbuff);send(sockclient,sendbuff,strlen(sendbuff)+1,0);recv(sockclient,recvbuff,strlen(recvbuff)+1,0);sprintf(tempbuff,"%s say:%s \n ",inet_ntoa(addrser.sin_addr),recvbuff);printf("%s",tempbuff);}closesocket(sockclient);WSACleanup();}
- 为写“QQ“做准备------(1)网络编程
- 软件编程体会(为内存调试做准备)
- 为未来做准备
- 为实习做准备
- 为面试做准备!!
- 为WDF做准备
- 为2016做准备
- 软件编程体会(为内存调试做准备)--命名规则
- 【2017网络协议编程与分析课程设计】(一)开始写程序之前的一些准备
- API经济时代的思考(转载目的:为之后写API-first模式的生命周期治理做准备)
- Java网络编程准备
- vc网络编程准备
- 中国经济为着陆做准备
- 为实习笔试做准备
- 为面试做的准备~
- [置顶] 为毕业做准备
- 为Eclipse写插件 -- 准备
- 从头开始编写操作系统(11) 第10章:为内核做准备1
- 代码揭秘之基础知识
- 线程调度
- 关于dip,dp,px,sp等单位的说明和区别
- Hypertable初体验之二进制安装
- bash 脚本写的“抓阄程序”(随机数)
- 为写“QQ“做准备------(1)网络编程
- 火狐怎样更改缓存路径
- 怎样修改IOS程序名称
- DivCSS布局实例 用dl dt dd来制作列表
- Android开发性能优化简介
- eclipse 中classes文件夹不见了的解决办法
- Hibernate中的3种对象状态
- java学习进阶
- EAS-BOS 应用框架编程指南