在linux下如何用c语言来写一个socket编程的聊天小程序

在linux下如何用c语言来写一个socket编程的聊天小程序,第1张

源码如下:

//chat_one.c

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <stdio.h>

#include <string.h>

#include <errno.h>

#include <malloc.h>

#include <sys/select.h>

int main( int argc, char **argv)

{

struct sockaddr_in chatone, chattwo

char pmsg[1000]

char *buf

intchatone_fd

intret,i

intlen, msg_len

fd_set fdset

if ( argc <2 ){

printf("please input ip address\n")

return -1

}

printf("server address is %s\n", argv[1])

chattwo.sin_family = AF_INET

chattwo.sin_port = htons(60002)

inet_pton(AF_INET, argv[1], &chattwo.sin_addr.s_addr)

chatone.sin_family = AF_INET

chatone.sin_port = htons(60000)

chatone.sin_addr.s_addr = INADDR_ANY

chatone_fd = socket(PF_INET, SOCK_DGRAM, 0)

if ( -1 == chatone_fd ){

printf("create socket failed %s\n", strerror(errno))

return -1

}

ret = bind(chatone_fd, (struct sockaddr *)&chatone, sizeof(chatone))

if ( -1 == ret){

printf("bind failed %s \n", strerror(errno))

return -1

}

for(i=0i<1000i++){

FD_ZERO( &fdset )

FD_SET ( 0, &fdset)

FD_SET( chatone_fd, &fdset)

if ( -1 == select ( chatone_fd+1, &fdset, NULL, NULL, NULL) ){

continue

}

if ( FD_ISSET( chatone_fd, &fdset)){

recvfrom( chatone_fd, pmsg, 999, 0, NULL, 0)

printf("receive %s\n", pmsg)

}

else{

memset( pmsg, 0, 1000)

fgets(pmsg, 999, stdin)

len = sizeof(chattwo)

sendto( chatone_fd, pmsg, 1000, 0,\

(struct sockaddr*) &chattwo, len)

printf("send %s\n", pmsg)

}

}

printf("sent %d packets\n", i)

close(chatone_fd)

return 0

}

//chat_two.c

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <stdio.h>

#include <string.h>

#include <errno.h>

#include <malloc.h>

#include <sys/select.h>

int main( int argc, char **argv)

{

struct sockaddr_in chatone, chattwo

char pmsg[1000]

char *buf

intchattwo_fd

intret,i

intlen, msg_len

fd_set fdset

if ( argc <2 ){

printf("please input ip address\n")

return -1

}

printf("server address is %s\n", argv[1])

chattwo.sin_family = AF_INET

chattwo.sin_port = htons(60002)

chattwo.sin_addr.s_addr = INADDR_ANY

chatone.sin_family = AF_INET

chatone.sin_port = htons(60000)

inet_pton(AF_INET, argv[1], &chatone.sin_addr.s_addr)

chattwo_fd = socket(PF_INET, SOCK_DGRAM, 0)

if ( -1 == chattwo_fd ){

printf("create socket failed %s\n", strerror(errno))

return -1

}

ret = bind(chattwo_fd, (struct sockaddr *)&chattwo, sizeof(chattwo))

if ( -1 == ret){

printf("bind failed %s \n", strerror(errno))

return -1

}

for(i=0i<1000i++){

FD_ZERO( &fdset )

FD_SET ( 0, &fdset)

FD_SET( chattwo_fd, &fdset)

if ( -1 == select ( chattwo_fd+1, &fdset, NULL, NULL, NULL) ){

continue

}

if ( FD_ISSET( chattwo_fd, &fdset)){

recvfrom( chattwo_fd, pmsg, 999, 0, NULL, 0)

printf("receive: %s\n", pmsg)

}

else{

memset( pmsg, 0, 1000)

fgets(pmsg, 999, stdin)

len = sizeof(chatone)

sendto( chattwo_fd, pmsg, 1000, 0,\

(struct sockaddr*) &chatone, len)

printf("send %s\n", pmsg)

}

}

printf("sent %d packets\n", i)

close(chattwo_fd)

return 0

}

编译好这个两个程序就可以进行简单的通信了。

你的思路可行

在win-xp下需要安装mysql-client吗?

不一定要安装,只复制DLL和修改app.config也可以

另外应该是需要ODBC连接数据库的,我在mysql官网上下载的odbc驱动是安装在ubuntu上?还是安装在xp上?

如果你要用ODBC则是安在XP上,如果你不用ODBC而用MySQL驱动就不用安装了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11981087.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存