
客户端:
#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)} } 如果帮到你了 希望能采纳欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)