招生熱線
0755-86191118 0755-86191118
我的位置: 首頁 > 學(xué)習(xí)專區(qū) > .NET技術(shù) > C語言socket編程之我的應(yīng)用

C語言socket編程之我的應(yīng)用

2013-05-24 08:37:04
來源:
[導(dǎo)讀] 以往上位機(jī)程序我們一般都是通過232、485和PLC通信,232通信受到距離的限制,485距離能夠滿足要求,也有不足的地方受環(huán)境干擾比較大,切傳

以往上位機(jī)程序我們一般都是通過232、485和PLC通信,232通信受到距離的限制,485距離能夠滿足要求,也有不足的地方受環(huán)境干擾比較大,切傳輸過程中速度不怎么快,新的課題通過網(wǎng)口與PLC通信,西門子的PLC我們用過網(wǎng)口作為傳輸介質(zhì),速度可以而且使用起來方便,只需一根網(wǎng)線就可以調(diào)試程序了,這次的課題是以O(shè)MR的PLC作為控制PLC,上位機(jī)程序(也就是大家說的組態(tài)軟件)我們自己來寫,我會寫出一系列的課程把我們實(shí)現(xiàn)的過程與大家一起分享,也希望做這快的朋友一起來討論。

今天是入門課利用socket實(shí)現(xiàn)TCP/IP通信編程,實(shí)現(xiàn)兩臺電腦通過IP互聯(lián)。

socket編程的教材網(wǎng)上搜羅下還是很多的,思路基本上也是一樣的,程序分兩部分客戶端和服務(wù)器端

第一部分 服務(wù)器端

一、創(chuàng)建服務(wù)器套接字(create)。

二、服務(wù)器套接字進(jìn)行信息綁定(bind),并開始監(jiān)聽連接(listen)。

三、接受來自用戶端的連接請求(accept)。

四、開始數(shù)據(jù)傳輸(send/receive)。

五、關(guān)閉套接字(closesocket)。

socket接收、發(fā)送代碼

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);

第二部分 用戶端

一、創(chuàng)建用戶套接字(create)。

二、與遠(yuǎn)程服務(wù)器進(jìn)行連接(connect),如被接受則創(chuàng)建接收進(jìn)程。

三、開始數(shù)據(jù)傳輸(send/receive)。

四、關(guān)閉套接字(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);

服務(wù)器端代碼和客戶端主要代碼基本上都是上面的程序,

在應(yīng)用的過程中有幾點(diǎn)要根據(jù)自己的需求更改,

1、127.0.0.1是服務(wù)器端的IP地址,根據(jù)自己的IP段進(jìn)行修改;

2、htons(6000)是端口號根據(jù)具體設(shè)定進(jìn)行修改,我們PLC端口號用到是9600,這點(diǎn)我們需要修改成9600。

網(wǎng)上好多程序都是VC6寫的,在參考過程中葉遇到了問題,程序LICK出現(xiàn)了如下錯誤

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里設(shè)置,工程屬性-鏈接器-命令行-附加選項(xiàng)添加 ws2_32.lib就ok了。

編譯通過后,服務(wù)器端,可以看到hello,

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

深圳北大青鳥

評論
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
亚洲一区二区三区深田咏美 | 宅男宅女精品视频一区二区 | 亚洲日韩国产综合 | 中文字幕日本免费视片 | 亚洲AV秘一区二区色 | 亚洲综合色区中文字幕 |