我的位置: 首页 > 学习专区 > .NET技术 > C语言socket编程之我的应用

C语言socket编程之我的应用

2013-05-24 08:37:04
来源:
[导读] 以往上位机程序我们一般都是通过232、485和PLC通信,232通信受到距离的限制,485距离能够满足要求,也有不足的地方受环境干扰比较大,切传

以往上位机程序我们一般都是通过232、485和PLC通信,232通信受到距离的限制,485距离能够满足要求,也有不足的地方受环境干扰比较大,切传输过程中速度不怎么快,新的课题通过网口与PLC通信,西门子的PLC我们用过网口作为传输介质,速度可以而且使用起来方便,只需一根网线就可以调试程序了,这次的课题是以OMR的PLC作为控制PLC,上位机程序(也就是大家说的组态软件)我们自己来写,我会写出一系列的课程把我们实现的过程与大家一起分享,也希望做这快的朋友一起来讨论。

今天是入门课利用socket实现TCP/IP通信编程,实现两台电脑通过IP互联。

socket编程的教材网上搜罗下还是很多的,思路基本上也是一样的,程序分两部分客户端和服务器端

第一部分 服务器端

一、创建服务器套接字(create)。

二、服务器套接字进行信息绑定(bind),并开始监听连接(listen)。

三、接受来自用户端的连接请求(accept)。

四、开始数据传输(send/receive)。

五、关闭套接字(closesocket)。

socket接收、发送代码

1 SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);

2 char sendBuf[50];

3 sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));

4 send(sockConn,sendBuf,strlen(sendBuf)+1,0);

5 char recvBuf[50];

6 recv(sockConn,recvBuf,50,0);

7 printf("%s\n",recvBuf);

8 closesocket(sockConn);

第二部分 用户端

一、创建用户套接字(create)。

二、与远程服务器进行连接(connect),如被接受则创建接收进程。

三、开始数据传输(send/receive)。

四、关闭套接字(closesocket)。

客户端代码

1 SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

2

3 SOCKADDR_IN addrSrv;

4 addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

5 addrSrv.sin_family=AF_INET;

6 addrSrv.sin_port=htons(6000);

7 connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

8 send(sockClient,"hello",strlen("hello")+1,0);

9 char recvBuf[50];

10 recv(sockClient,recvBuf,50,0);

11 printf("%s\n",recvBuf);

服务器端代码和客户端主要代码基本上都是上面的程序,

在应用的过程中有几点要根据自己的需求更改,

1、127.0.0.1是服务器端的IP地址,根据自己的IP段进行修改;

2、htons(6000)是端口号根据具体设定进行修改,我们PLC端口号用到是9600,这点我们需要修改成9600。

网上好多程序都是VC6写的,在参考过程中叶遇到了问题,程序LICK出现了如下错误

unresolved external symbol __imp__closesocket@4

解决办法:

这是由于VC库中没有加如 ws2_32.lib 所致。

解决方案一:程序代码中加入#pragma comment(lib, "Ws2_32.lib")

解决方案二:在project\setting\link 中object/library modules加入 ws2_32.lib

这个是VC6的解决方案,我用的VS2008找了一下

上个图吧,VS2008里设置,工程属性-链接器-命令行-附加选项添加 ws2_32.lib就ok了。

编译通过后,服务器端,可以看到hello,

客户端,可以看到welcome 127.0.0.1 to here!

深圳北大青鸟

大家都关注:
评论
热点专题
>>
相关文章推荐
>>