求linux下多线程socket监听的c程序 【【高分】】

求linux下多线程socket监听的c程序 【【高分】】,第1张

帮你写好了,你QQ就不加了,200分只写这么多

客户端:

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#include <string.h>

#include <netdb.h>

#include <sys/types.h>

#include <netinet/in.h>

#include <sys/socket.h>

#define SERVPORT 3333

#define MAXDATASIZE 100

#define SERVIP "192.168.1.230"

main(int argc,char *argv[]){

int sockfd,sendbytes

char buf[MAXDATASIZE]

struct hostent *host

struct sockaddr_in serv_addr

if(argc <2){

fprintf(stderr,"Please enter the server's hostname!\n")

exit(1)

}

if((host=gethostbyname(argv[1]))==NULL){

perror("gethostbyname")

exit(1)

}

if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){

perror("皮肆socket")

exit(1)

}

serv_addr.sin_family=AF_INET

serv_addr.sin_port=htons(SERVPORT)

serv_addr.sin_addr.s_addr = inet_addr(SERVIP)

bzero(&(serv_addr.sin_zero),8)

if(connect(sockfd,(struct sockaddr *)&serv_addr,\

sizeof(struct sockaddr))==-1){

perror("connect")

exit(1)

}

if((sendbytes=send(sockfd,"hello",5,0))==-1){

perror("send")

exit(1)

}

close(sockfd)

}

服务端:携谈

#include <sys/types.h>

#include <sys/socket.h>

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#include <string.h>

#include <unistd.h>

#include <netinet/in.h>

#include <pthread.h>

#define SERVPORT 3333

#define BACKLOG 10

#define MAX_CONNECTED_NO 10

#define MAXDATASIZE 5

#define SERVIP "192.168.1.230"

void mypthread(void *sockfd)

{

char buf[MAXDATASIZE]

int recvbytes

pthread_detach(pthread_self())

if((recvbytes=recv((int)sockfd, buf, MAXDATASIZE, 0)) == -1){

perror("recv")

exit(1)

}

printf("received a connection :%s\n", buf)

close((int)sockfd)

}

int main()

{

struct sockaddr_in server_sockaddr,client_sockaddr

int sin_size

int sockfd,client_fd

pthread_t tid

if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1){

perror("辩握碰socket")

exit(1)

}

printf("socket success!,sockfd=%d\n",sockfd)

server_sockaddr.sin_family=AF_INET

server_sockaddr.sin_port=htons(SERVPORT)

server_sockaddr.sin_addr.s_addr = inet_addr(SERVIP)

bzero(&(server_sockaddr.sin_zero),8)

if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1){

perror("bind")

exit(1)

}

printf("bind success!\n")

if(listen(sockfd,BACKLOG)==-1){

perror("listen")

exit(1)

}

printf("listening....\n")

sin_size = sizeof(client_sockaddr)

if((client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size))==-1){

perror("accept")

exit(1)

}

pthread_create(&tid, NULL, &mypthread, (void *)client_fd)

return 0

}

编译:

gcc client.c -o client

gcc server.c -lpthread -o server

运行:

开启两个终端

第一个:

./server

第二个:

./client 192.168.1.230

友情提醒:你的本机IP必须和程序里的IP一样,否则运行会出错

我的做法和你不太相同 一下是我写的服务器端的代码 你可以尝试下(我测试没错兄轿) private void OnStartListening(IPAddress ip, int port) { //首先是套旅袭接字和终端的设置 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)IPEndPoint ipEndPoint = new IPEndPoint(ip, port)//绑定套羡镇肆接字 socket.Bind(ipEndPoint)//最大监听列队 socket.Listen(10)while (true) { //缓冲区 byte[] bytes = new byte[1024]//定义一个新的套接字接受传递来的消息 Socket newSocket = socket.Accept()//保存接受的消息的长度 int n = newSocket.Receive(bytes)//str即为接受到得字符串 string str = Encoding.Default.GetString(bytes, 0, n)} } 如果帮到你了 希望能采纳


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

原文地址:https://54852.com/yw/12564751.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存